簡體   English   中英

如何在C中使用UNIX終端輸入重定向?

[英]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 在這種情況下可能沒有必要,但這是一個選擇。


您可以使用atoistrtol解析整數選項,但是可以根據需要將其從字符串( char* )轉換為整數類型,然后將fopenfgetsfclose轉換為從輸入文件中讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM