gpt4 book ai didi

创建子进程,让子进程的父进程传输文件。我该怎么做?

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:46 25 4
gpt4 key购买 nike

这是我的代码。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>


int file,parentID,childID;
pid_t pid;

int main(int argc, char *argv[])
{

if( argc != 2 )
{
printf("ERROR ! You have not write an argument\n");
printf("ERROR ! You give more than one argument");
return 1;
}

file = open(argv[1], O_RDONLY); //open file

if(file<0) //test the file
{
printf("Error open file\n");
printf("ERROR : %s\n", strerror(errno));
return 1;
}

// ---------------------------------------------------------------------

pid = fork();


if( pid == -1) //error fork
{
printf("Error fork\n");
return 1;
}


if(pid == 0) // child process
{
childID = getpid();
printf("Child process %d\n",childID);
// if(childID %2 == 1)
// {
// parentID = getppid();
// printf("Process of father of this child= %d\n",parentID);
// }
}

if( pid == 1)
{
parentID = getppid();
printf("ParentProcess %d\n",parentID);
}

}

我必须编写一个程序来创建一个子进程。根据子进程的奇偶校验,父进程应该通过文件向子进程传输一条消息,该消息由子进程接管并显示(如果子进程是一个能被 2 整除的数字,它会说 -“早安!”否则“晚安!”。父进程应该等待子进程的最终执行终止。

我真的很努力地做这个练习,但我找不到任何东西来解释我应该如何或使用什么函数/结构对象来做这个。上面我试过了,但我失败了,我明白了如何 fork确实但是...请帮助我处理这段代码,或者建议我是否应该阅读以进行此练习。抱歉我的英语拼写错误。

最佳答案

系统调用使用什么文档?

有很多方法可以做到这一点,但您可能想要做的是创建一个管道,然后 fork 进程。由于 fork 复制所有内容,并且子进程继承环境,因此每个进程都有管道文件描述符的副本。然后,您可以根据 fork() 的返回值进行读/写。

int main(int argc, char *argv[])
{
int fd[2];
char in[128], out[128];

if( argc != 2 )
{
printf("ERROR ! You have not write an argument\n");
printf("ERROR ! You give more than one argument");
return 1;
}

if (pipe(fd) == -1)
return 1;

// ---------------------------------------------------------------------

pid = fork();

if (!pid)
read(fd[0], in, 128);
else
write(fd[1], out, strlen(out) + 1);

请注意,您通常希望关闭不用于单向通信的文件描述符

关于创建子进程,让子进程的父进程传输文件。我该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26329346/

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