我的主要应该做的是使用系统调用从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;
}
答案 0 :(得分: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库)。或者,如果需要,您可以直接谷歌获取更轻量级的跨平台参数解析器。
答案 1 :(得分: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