gpt4 book ai didi

c - 将随机生成的值从子进程发送到父进程

转载 作者:行者123 更新时间:2023-11-30 16:12:32 25 4
gpt4 key购买 nike

我编写了一段代码,使用 rand() 在子进程中生成随机数...我需要使用 pipeline() 将此随机值发送到父进程。当我使用 read() 和 write() 时,父级收到的值是 0 而不是随机数。

我没有收到任何错误,只是输出是收到的值是:0。

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>
#include<fcntl.h>


int main ()
{

pid_t Cpid;
int fd[2];

int rVal;



//pid will store the value of fork()
Cpid = fork();
pipe(fd);

if( Cpid == 0)
{

//CHILD
rVal = rand()%100;
;
//this is in child process
close (fd[0]);
rVal = rand()%100;
write(fd[1], &rVal,sizeof (rVal));
close (fd[1]);

printf(" Child Pid : %d sending random value : %d to parent : %d\n",
getpid(), rVal, getppid());


}


else if(Cpid != 0 )
{

printf (" Parent PID : %d\n", getpid());
//this is the parent process
close(fd[1]);
read(fd[0], &rVal, sizeof(rVal));
printf(" value recieved is : %d\n", rVal);
close(fd[0]);
printf(" value recieved by parent : %d\n", rVal);

}



return 0;


}

最佳答案

代码应该在 fork 子项之前设置管道。否则,父级和子级将使用不同的管道,并且无法相互通信。

int main ()
{

pid_t Cpid;
int fd[2];

// Create the pipe BEFORE forking.
pipe(fd);

//pid will store the value of fork()
Cpid = fork();

if( Cpid == 0)
.. REST OF CODE ~~~

关于c - 将随机生成的值从子进程发送到父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58313001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com