C 写入结构内的管道失败

C 写入结构内的管道失败,c,process,pipe,shared-memory,C,Process,Pipe,Shared Memory,我有一个包含以下数据成员的结构 struct process{ char *arg1; char *arg2; int fd[2]; int shmID; }; 我用arg1、arg2和shmID初始化一个名为process1的进程结构,shmID是我用shmget生成的共享内存进程的id 然后,我使用以下代码从存储在我的结构中的数组创建一个管道 if(pipe(process1.fd) < 0){ printf("Pipe Fai

我有一个包含以下数据成员的结构

struct process{
    char *arg1;
    char *arg2;
    int fd[2];
    int shmID;
};
我用arg1、arg2和shmID初始化一个名为process1的进程结构,shmID是我用shmget生成的共享内存进程的id

然后,我使用以下代码从存储在我的结构中的数组创建一个管道

if(pipe(process1.fd) < 0){
       printf("Pipe Failed\n");
       exit(1);
}
if(管道(process1.fd)<0){
printf(“管道失败\n”);
出口(1);
}
然后我调用一个函数并传入我刚刚创建和初始化的结构的地址,该结构的名称现在是“unit”。我在函数中分叉进程,如果它是父进程,我关闭读取端,写入管道,然后关闭写入端,在子进程中,我关闭写入端并从管道读取

然而,没有任何东西被写入管道

    int val = 12;
    pid_t pid = fork();
    // If pid is less than 0 the fork failed
    if(pid < 0){
            printf("Fork Failed\n");
            exit(-1);
    }
    // Parent Code
    else if(pid > 0){
            close(unit->fd[0]);
            write(unit->fd[1], &val, sizeof(int));
            close(unit->fd[1]);

           ....additional code (I can add if needed, it just waits for the return of the child)

    }
    // In Child
    else if(pid == 0){
            close(unit->fd[1]);
            char str[8];
            sprintf(str, "%d", unit->fd[0]);
            execlp("./program2","programName",unit->arg1,unit->arg2,str, NULL);
    }
int val=12;
pid_t pid=fork();
//如果pid小于0,则分叉失败
if(pid<0){
printf(“Fork失败\n”);
出口(-1);
}
//父代码
否则,如果(pid>0){
关闭(单位->fd[0]);
写入(单位->fd[1],&val,sizeof(int));
关闭(单元->fd[1]);
..附加代码(如果需要,我可以添加,它只需等待孩子的返回)
}
//在儿童时期
否则如果(pid==0){
关闭(单元->fd[1]);
char-str[8];
sprintf(str,“%d”,单位->fd[0]);
execlp(“./program2”,“programName”,unit->arg1,unit->arg2,str,NULL);
}

请发布一些我们可以编译的东西。您是如何检测到“没有任何东西写入管道的”?您应该检查所有非无效函数(如
write
)的返回代码。请回答您的问题以添加信息。不要用评论来回答。也许你错过了对dup2的电话?!你是如何从管道中读取数据的?管道不知道它们在结构中。要么是结构问题,要么是管道问题——这些东西之间没有交互作用。你试过找出哪个吗?(实际上管道不能在结构中。
fd
存储两个数字,这是管道的ID号,它实际上不存储管道)