[英]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.