Tha*_*lla 2 c linux signals producer-consumer
以下代码应该同步两个进程,一个编写一些整数的生产者,以及一个读取它们的消费者,现在执行它时会给我这个错误:
‘O_CREATE’ undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)
但我已经包括了fcntl.h,还有什么可能是问题?
int main(void)
{
int fd, n, i;
pid_t pid, ppid;
char buf[1];
if((fd=open("/tmp/data_file", O_APPEND|O_CREATE, 0640)) <0) exit(1);
sigset(SIGTERM,SIG_IGN);/* signal */ ; sigset(SIGINT,SIG_IGN); /* signal */
pid=fork();
switch (pid) {
case -1: { perror(“FORK”); exit(1); }
case 0: /* child process - Producer */
sigset(SIGUSR1,wakeup);
sighold(SIGUSR1); /* block / hold signals SIGUSR1 until sigpause*/
for (i=0; i<=100; i++) {
/* sleep a random amount of time */
n = (int)(getpid()%256);
srand((unsigned)n);
sleep(rand() %5);
/* writes a character in file */
sprintf(buf,"%d",i);
write(fd, buf,sizeof(buf));
fprintf(stderr,"Producer PID=%d value = %d\n",getpid(), i);
ppid=getppid();
kill(ppid, SIGUSR2);
sigpause(SIGUSR1); /* pause(); until SIGUSR! received*/
}
break;
default: /* -parent code - Consumer */
sigset(SIGUSR2,wakeup);
sighold(SIGUSR2); /* block / hold signals SIGUSR2 until sigpause*/
for (i=0; i<=100; i++) {
/* sleep a random amount of time */
n = (int)(getpid()%256);
srand((unsigned)n);
sleep(rand() %5);
sigpause(SIGUSR2); /* pause(); */
/* reads a character from file */
read(fd, buf,sizeof(buf));
fprintf(stderr,"Consumer PID=%d value=%d\n",getpid(),atoi(buf));
kill(pid, SIGUSR1) ;
}
break;
}
exit(0);
}
Run Code Online (Sandbox Code Playgroud)