我必须制作程序,这将使两个子进程。这些进程会在文件中写入一些内容(字符串...)。父进程应决定将哪个进程写入文件 我已经创建了子进程,但我坚持这些信号,我不知道如何做到这一点
#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;
}
感谢
答案 0 :(得分:1)
首先,您的子进程会在创建后立即退出。如果他们没有,那么第一个孩子就会创造一个自己的孩子。您可能希望在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”有点用词不当。