1

我正在寻找一种方法来从终端的管道或通过将文件名指定为参数来将输入拉入我的程序。有效地

1. foo | myprogram
OR
2. foo > bar; myprogram -w bar

第二个操作只需读取文件即可完成。但是,我对如何使用管道将输出重定向foo到空白处。myprogram在我设法找到的所有示例中,管道几乎专门用于从父进程到子进程的 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
4

2 回答 2

3

第二个操作只需读取文件即可完成。但是,我对如何使用管道将输出从 foo 重定向到 myprogram 持空白。

当使用管道重定向时,shell 将stdout左侧的进程设置为转到stdin右侧的进程。只需stdin像往常一样阅读就可以了。

于 2012-11-20T19:41:25.400 回答
0

你可以这样做:

FILE* input;
//...
if (argc == 1) {
    input = stdin;
} else {
    input = fopen(argv[2] /* or whatever */, "r");
}
于 2012-11-20T19:45:46.797 回答