我的大项目的一部分是使用管道与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);
//....
}