错误:'O_CREATE'未声明(首次使用此功能)

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)

Yu *_*Hao 6

宏名称应该是O_CREAT,而不是O_CREATE.

是的,我也讨厌Unix世界中的这些名字.

来自维基百科

Ken Thompson曾经被问到如果他重新设计UNIX系统他会做些什么.他的回答是:"我会拼写creat一个e."