使用管道在分隔文件中定义的进程之间发送数据

时间:2018-01-13 22:38:45

标签: c unix

我的大项目的一部分是使用管道与2个流程进行通信 P1进程生成数字,将它们转换为十六进制,然后通过管道将它们发送到P2进程 P2打印数字。

pipe1.c

library(data.table)
df1 <- merge(df1, df2)[order(Product)]
df1[, Price1 := Price1 / EUR_USD_Rate]
df1[, EUR_USD_Rate := NULL]
df1
         Time Product    Price1
1: 2017-01-31       A  8.333333
2: 2017-02-28       A 10.543657
3: 2017-03-31       A 12.582237
4: 2017-01-31       B  9.166667
5: 2017-02-28       B  9.884679
6: 2017-03-31       B 10.032895
7: 2017-01-31       C  9.166667
8: 2017-02-28       C  9.555189
9: 2017-03-31       C  9.868421

pipe2.c

#define WRITE 1
#define READ 0
int main() {
int i;
char hex[30];
int my_pipe[2];
pipe(my_pipe);  
int var;        
            close(my_pipe[READ]);
            for(i=50;i<100;i++){
                printf("P1 generated: %d\n",i);
                sprintf(hex, "%x", i);
                write(my_pipe[WRITE], &hex, sizeof(hex));
                printf("P1 in hex %s\n",hex);
                sleep(3);

                }

    return 0;
}

所有流程都是由我的主项目文件启动的:

#define WRITE 1
#define READ 0


int main() {
char hex[30];
int my_pipe2[2];
pipe(my_pipe2);
int var;        

            close(my_pipe2[WRITE]);
            for(;;){
            read(my_pipe2[READ], &hex, sizeof(hex)); 
            printf("P2 received:  %s",hex);
            sleep(3);
            }


    return 0;
}

有人可以帮助我并告诉我哪里出错了吗? 我尝试了很多东西但没有结果 我刚买了一张照片:

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


//.....
    if (fork() == 0) {
        execlp("./pipe1", "./pipe1", NULL);
    }
sleep(1);
    if (fork() == 0) {
        execlp("./pipe2", "./pipe2", NULL);
    }
sleep(1);
//....
}

0 个答案:

没有答案