【问题标题】:Linux command-line redirection with 2 c-files带有 2 个 c 文件的 Linux 命令行重定向
【发布时间】:2014-05-28 03:13:10
【问题描述】:

我刚接触 Linux 中的管道 I/O 功能。 制作了2个c文件,第一个发送数据:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>

    int main(int argc, char* argv[])
    {
         int i = 0;

         for(;;)
         {
             printf("\nSent number: %d",i);
             i++;
             sleep(1);
             fflush(stdout);
         }

    return 0;
}

第二个文件接收打印出来的数字并显示出来:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>

int main(int argc, char* argv[])
{    
    int x;

    for(;;)
    {
        scanf("%d",&x);
        printf("Received number: %d\n",x);
        sleep(1);
        fflush(stdout);
    }

    return 0;
}

最后我尝试将数据从第一个文件重定向到第二个文件:

./send_test.out | ./rcv_test.out

终端反复打印:“Received number: 0”,我做错了什么? 另外,在将输出从发送方定向到接收方的同时,我如何必须为同时运行的两个程序设置终端窗口?

提前致谢

【问题讨论】:

    标签: c linux terminal pipelining


    【解决方案1】:

    您没有以接收者可以理解的格式“发送”号码。

    尝试从发件人的格式字符串中删除除%d 之外的所有文本。

    另外,你应该在依赖它之前检查scanf()的返回值。

    【讨论】:

    • 成功了,谢谢!但是,如何在 2 个不同的终端窗口上同时运行这两个程序?
    • 你可以为两个程序创建一个 FIFO 来发送数据。键入“mkfifo pipe”,然后运行“./program1 > pipe”并在另一个窗口中运行“./program2
    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多