2013-03-20 32 views
0

我的主要應該做的是從系統調用中讀取標準輸入。或者如果給出文件參數打開文件參數。我已經編碼這個從一個文件參數中讀取。但現在我需要它從多個文件參數中打開,並且我很少了解如何執行此操作的邏輯。我如何讓我的代碼能夠打開多個文件參數?從stdin或多個文件參數中讀取

int main(int argc, char *argv[]) { 
    char *file_pathname = NULL; 
    int fd; 
    char file_buffer[540]; 

    //Check for proper number of arguments: 
    if(argc < 2) { 
     exit(2); 
    } 

    if(argc < 3) { 
     file_pathname = "stdin"; 
    } 

    file_pathname = argv[2]; 

    if(argc < 3) { 
     ((fd = read(STDIN_FILENO,file_buffer, FILE_BUFFER_SIZE))); 
    } 
    // FILE argument given, so try to open it: 
    if (argc == 3) { 
     if ((fd = open(file_pathname,O_RDONLY)) == -1) { 
      perror("ERROR OPENING FILE"); 
      return 2; 
     } 
+2

'for(int i = 2; I <的argc; i ++){fname = argv [i]; ...}' – 2013-03-20 03:07:19

+0

我需要能夠打開多個文件參數。因此argv2 argv3 argv4中的每個文件參數........打開每個文件 – Newbiey 2013-03-20 14:16:59

回答

1

如果你只想在Linux上運行您的程序(POSIX兼容)系統,您可以在

man 3 getopt 

感興趣這是功能,可以幫助您解析命令行參數在短UNIX風格,例如:

myprog -a 5654 -f -n ~/Test/input.txt 

如果要解析長選項,還有getopt_long()和getopt_long_only()。

如果你想要一些特定的參數解析器(我不建議),你可以實現它作爲庫。

如果您使用的是glib或gtk,則有glib解析器。如果你有一個qt項目,或者是一個qxt解析器(擴展Qt庫)。或者,如果需要,您可以只搜索更輕量級的跨平臺參數解析器。

0

開始與獲取文件descritor和你想要做什麼的函數:

void do_stuff(int fd); 

添加一個又一個,這不相同,通過文件名:

void do_stuff_fname(const char *fname); /* Open fname and call do_stuff */ 

現在,您main應該打電話:

if (argc < 2) { 
    do_stuff(STDIN_FILENO); 
} else { 
    int i; 
    for (i=1; i<argc; i++) do_stuff_fname(argv[i]); 
} 

您可以通過使用getopt,作爲JustAnotherCurious suggested