Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 允许多个进程读取相同数据的管道_C_Macos_Pipe - Fatal编程技术网

C 允许多个进程读取相同数据的管道

C 允许多个进程读取相同数据的管道,c,macos,pipe,C,Macos,Pipe,我编写了以下代码: #include <stdio.h> #include <unistd.h> #include <sys/wait.h> #define N 10 int fd[2]; void son () { int data=0; if(read(fd[0], &data, sizeof(int))==sizeof(int)) fprintf(stderr,"%d\n",data); else fprintf(stder

我编写了以下代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

#define N 10

int fd[2];

void son ()
{
int data=0;
if(read(fd[0], &data, sizeof(int))==sizeof(int))
    fprintf(stderr,"%d\n",data);
else
    fprintf(stderr,"Read failed\n");
}

int main(int argc, char** argv)
{
pid_t sons[N];
pipe(fd);
int data=5;
for(unsigned int i=0; i<N;i++)
{
    sons[i]=fork();
    if(!sons[i])
    {
        son();
        break;
    }
}
write(fd[1], &data, sizeof(int));
data=6;
}
#包括
#包括
#包括
#定义n10
int-fd[2];
虚子()
{
int数据=0;
if(读取(fd[0],&data,sizeof(int))==sizeof(int))
fprintf(stderr,“%d\n”,数据);
其他的
fprintf(stderr,“读取失败\n”);
}
int main(int argc,字符**argv)
{
皮迪儿子[N];
管道(fd);
int数据=5;
对于(unsigned int i=0;i当您fork()时执行son(),然后跳出循环-但这不是子进程的结束!然后子进程继续并写入fd[1]。

当您fork()时执行son(),然后跳出循环-但这不是子进程的结束!然后子进程继续并写入fd[1]

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

#define N 10

int fd[2];

void son ()
{
int data=0;
if(read(fd[0], &data, sizeof(int))==sizeof(int))
    fprintf(stderr,"%d\n",data);
else
    fprintf(stderr,"Read failed\n");
if(read(fd[0], &data, sizeof(int))==sizeof(int))
    fprintf(stderr,"%d\n",data);
else
    fprintf(stderr,"Read failed\n");
}

int main(int argc, char** argv)
{
pid_t sons[N];
pipe(fd);
int data=5;
for(unsigned int i=0; i<N;i++)
{
    sons[i]=fork();
    if(!sons[i])
    {
        son();
        break;
    }
}
write(fd[1], &data, sizeof(int));
data=6;
write(fd[1], &data, sizeof(int));
return 0;
}