c多叉管
我的课程代码有问题,我必须在不同的进程中运行不同的函数,然后通过管道将结果返回给家长并显示出来。我遇到了一些问题,所以我现在正试图用一个基本的程序来理解它,但是我仍然会出错 首先,我无法获取c多叉管,c,fork,pipe,C,Fork,Pipe,我的课程代码有问题,我必须在不同的进程中运行不同的函数,然后通过管道将结果返回给家长并显示出来。我遇到了一些问题,所以我现在正试图用一个基本的程序来理解它,但是我仍然会出错 首先,我无法获取pid=wait(&status)它一直说pid是未定义的,当我四处走动时,我转到管道上,但信息似乎没有到达家长 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/wait
pid=wait(&status)代码>它一直说pid是未定义的,当我四处走动时,我转到管道上,但信息似乎没有到达家长
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#define PROCS 5
int main(void){
int pipes[PROCS][2];
pid_t ret[PROCS];
int status = 0;
int i;
char msg[PROCS][100];
for(i = 0;i < PROCS; i++){
//create pipes
//create pipes
if (pipe(pipes[i]) != 0) { // Create a new pipe.
printf("Could not create new pipe %d", i);
exit(1);
}
if ((ret[i] = fork()) == -1) {
printf("Could not fork() new process %d\n", i);
exit(1);
}else if (ret[i] == 0) {//if child
close(pipes[i][1]);
char string[] = "child process"; //%d - process id = %d\n", i, getpid();
write(pipes[i][0], string, 25);
exit(0);
}
}
if(getpid() > 0){
for(i = 0; i < PROCS; i++) {
wait(&status);
}
for(i = 0; i < PROCS; i++) {
close(pipes[i][1]);
read(pipes[i][0], &msg[i], 100);
close(pipes[i][0]);
}
printf("test 1 : %s\n", msg[0]);
printf("test 2 : %s\n", msg[1]);
printf("test 3 : %s\n", msg[2]);
printf("parent process - process id = %d\n", getpid());
exit(0);
}
}
#包括
#包括
#包括
#包括
#定义过程5
内部主(空){
内部管道[PROCS][2];
pid_t ret[PROCS];
int status=0;
int i;
char msg[PROCS][100];
对于(i=0;i0){
对于(i=0;i
上述内容毫无意义。getpid()
总是大于0,因为每个进程的pid都大于零。您希望对存储在ret[i]中的fork
返回的pid执行此测试。在这种情况下,这也是不必要的,因为您的孩子将退出,因此无论如何只有家长才能访问此代码
总是,总是,总是检查您的返回代码。如果您有,您会立即看到管道写入失败,管道读取返回0。thx工作正常,thx指出getpid错误,我没有意识到这一点
}else if (ret[i] == 0) {//if child
close(pipes[i][1]); <== (1)
char string[] = "child process"; //%d - process id = %d\n", i, getpid();
write(pipes[i][0], string, 25); <== (2)
exit(0);
//.....
for(i = 0; i < PROCS; i++) {
close(pipes[i][1]);
read(pipes[i][0], &msg[i], 100); <-- (3)
close(pipes[i][0]);
}
if(getpid() > 0){