C通过管道或参数输入

时间:2012-11-20 19:38:27

标签: c

我正在寻找一种方法,从终端的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

2 个答案:

答案 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");
}