gpt4 book ai didi

子进程写入文件

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

我必须编写程序,这将生成两个子进程。这些进程将在文件中写入一些东西(字符串...)。父进程应该决定哪个进程要写入文件我已经创建了子进程,但我被这些信号卡住了,我不知道如何做到这一点

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#define READY_SIGNAL SIGUSR1
#define max 1000
int main(int argc, char *argv[]) {
FILE *file;
int o;
char *name;
opterr = 0;
while ((o = getopt(argc, argv, "hp:")) != -1)
switch (o) {
case 'h':
Help();
exit(1);

default:
exit(1);
}
argc -= optind;
argv += optind;
if(argc==0){
printf("file name\n");
scanf("%s",&name);
file=fopen(name,"a+");
if( file != NULL)
{
printf("file created\n");
// fclose(file);
}

else printf("the file does not exist\n");

}
else if(argc>1) {
return(1);
}
else
meno=argv[0];
file=fopen(name,"a");
if( file != NULL){
printf("file created\n");
}
else printf("the file does not exist\n");

pid_t child_pid, child_pid2;

printf ("the main program process ID is %d\n", (int) getpid());

child_pid = fork () ;
if (child_pid != 0) {
printf ("this is the parent process, with id %d\n", (int) getpid ());
printf ("the child's process ID is %d\n",(int) child_pid );
}
else {
printf ("this is the child process, with id %d\n", (int) getpid ());
exit(0);
}

child_pid2 = fork () ;
if (child_pid2 != 0) {
printf ("this is the parent process, with id %d\n", (int) getpid ());
printf ("the child's process ID is %d\n",(int) child_pid2 );
}
else
{
printf ("this is the child process, with id %d\n", (int) getpid ());
exit(0);
}
return 0;

}

谢谢

最佳答案

首先,您的子进程在创建后立即退出。如果他们不这样做,那么第一个 child 就会创建自己的 child 。您可能希望在 for 循环中创建子项并执行如下操作:

if(child_pid[i] != 0)
{
/* This is the parent. */
}
else
{
/* This is the child. */
do_child_stuff();
exit(0);
}

在 fork() 之前打开文件是个坏主意。您最终将得到三个进程,它们都持有对具有相同权限的同一文件的文件句柄。如果你这样做,生活就会开始变得复杂!通常只在真正需要时才打开文件,并在使用完后立即关闭它们。


我想你的问题的意思是你想让父进程通过父进程给子进程发送一个信号来告诉子进程写。有更简单的方法可以做到这一点,但我猜你的老师希望你演示如何使用信号来做到这一点。

首先,您需要编写一个信号处理程序。参见 http://linux.die.net/man/2/signal有关如何执行此操作的更多信息。

其次,您需要实际发送信号。参见 http://linux.die.net/man/2/kill了解更多信息。请注意,“kill”这个名称有点用词不当。

关于子进程写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4366926/

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