我怎样才能将更多的值写入pipe道并读取它们?

我在linux下用c ++编写一个程序,其中一个subprocess应该在pipe道中写入两个长的值,父进程应该读取它们。 到目前为止,我在onlz中设置了两个(命名)pipe道,并通过写入(fd1,&value1,sizeof(long))写入每个pipe道,并通过读取(fd1,&value1,sizeof(long))读取它。 只是一个pipe道都会更好,但我不知道如何做到这一点。

我试过了:

write(fd1,&value1,sizeof(long)); write(fd1,&value2,sizeof(long)); 

和两个读取,但这似乎导致进程阻塞和彼此等待。

如果有人能给我一个提示,我会很高兴,如何实现这一点。

可能的解决scheme:我写了一个数组中的所有值(因为我知道有多less),那么我只需要一个线/读通话。

它应该工作正常。 这是一个非常简单的例子。 它主要是手册页中示例代码的副本。

 int main(int argc, char *argv[]) { int fd[2]; pid_t cpid; int ret; int val = 0; if (pipe(fd) == -1) { perror("pipe"); exit(EXIT_FAILURE); } cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { // close write end of pipe in child close(fd[1]); ret = read(fd[0], &val, sizeof( val )); printf( "1: result = %d, value = %d\n", ret, val ); ret = read(fd[0], &val, sizeof( val )); printf( "2: result = %d, value = %d\n", ret, val ); close(fd[0]); _exit(EXIT_SUCCESS); } else { // close read end of pipe in parent close(fd[0]); val = 42; if ( write(fd[1], &val, sizeof(val)) < 0 ) perror( "write" ); val++; if ( write(fd[1], &val, sizeof(val)) < 0 ) perror( "write" ); close(fd[1]); wait(NULL); exit(EXIT_SUCCESS); } } 

你应该检查你的read()的返回值,这两个long将最终(也可能)一起发送到接收进程。 在这种情况下,您需要将接收到的缓冲区拆分为两个长整型。