繁体   English   中英

从标准输入或多个文件参数读取

[英]Read from stdin or multiple file arguments

我的主要任务是使用系统调用从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;
        }

如果您希望程序仅在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库)中的解析器。 或者,您也可以根据需要在Google上搜索更轻量的跨平台参数解析器。

从获取文件描述符并执行所需操作的函数开始:

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]);
}

JustAnotherCurious建议 ,您可以使用getopt来改进此功能

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM