我正在寻找一种方法,从终端的Pipe或通过指定文件名作为参数将输入提取到我的程序中。用途不同
1. foo | myprogram
OR
2. foo > bar; myprogram -w bar
只需阅读文件即可完成第二项操作。但是,我在如何使用管道将foo
的输出重定向到myprogram
中的空白。在所有示例中,我设法发现Pipes几乎专门用于从父进程到子进程的IPC。我在考虑合适的管道还是这是一种不同的机制?
我也意识到当执行foo | myprogram
时,程序会被同时执行。如果连续读取foo
,如何处理。
编辑:
忘了包含这个:
int main(){
char buff[255];
int i = read(0, buff, 255);
printf("Debug: %s\n", buff);
return 0;
}
例如,如果我执行ls | myprogram
,我倾向于接收。
. ../ files
Debug:
而不是
Debug: . ../ files
答案 0 :(得分:3)
只需阅读文件即可完成第二项操作。 但是我在如何重定向foo的输出上画了一个空白 用管道进入myprogram。
使用管道重定向时,shell会在左侧设置进程的stdout
以转到右侧进程的stdin
。只需按照惯例阅读stdin
即可,然后就可以了。
答案 1 :(得分:0)
您可以这样做:
FILE* input;
//...
if (argc == 1) {
input = stdin;
} else {
input = fopen(argv[2] /* or whatever */, "r");
}