[英]How to use UNIX terminal input redirection in C?
我有這個C程序,它從用戶那里獲取輸入並將其發送給方法:
#include <stdio.h>
#include <string.h>
#include "constants.h"
#include "lines.h"
#include "compare.h"
//gets arguments and sends to compare.c
int main() {
int op = 1;
char filename[20];
scanf("%d ", &op);
gets(filename);
if ((char) op + '0' < 49 || (char) op + '0' > 57) {
printf("Error: Invalid input");
exit(0);
}
readstdin(filename, op);
return 0;
}
但是我不想執行程序並從stdin讀取,而是希望它從unix終端讀取,以便:
./sort [field] < input_file
將讀入文件。 (如果沒有輸入,[field]是選項,默認為1)。
例如,在UNIX中執行C程序的命令如下所示:
./sort 1 < test.txt
我該怎么做呢?
非常感謝任何幫助!
首先,您會在代碼中以錯誤的方式獲取參數。 如果要運行./sort <option> <filename>
,則不要使用stdin
來檢索這些參數。
使用以下函數簽名將C程序中的參數傳遞給main:
int main(int argc, char *argv[])
argc
是傳遞給程序的命令行參數的數量,而argv
是這些參數的字符串數組。
用./sort 5 test.in
運行:
argc
等於3 argv[0]
將為"./sort"
argv[1]
將為"5"
argv[2]
將為"test.in"
您應該檢查argc
的值是否為3,以確保已傳遞2個參數( "5"
, "test.in"
)以及文件名( "./sort"
),總共"./sort"
了3個。
如果要具有可選字段,最好將其放在必填字段之后,或者最好使用getopt之類的地方,而應改為: ./sort --file test.in
或./sort --opt 5 --file test.in
在這種情況下可能沒有必要,但這是一個選擇。
您可以使用atoi
或strtol
解析整數選項,但是可以根據需要將其從字符串( char*
)轉換為整數類型,然后將fopen
, fgets
和fclose
轉換為從輸入文件中讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.