条件!fork()和fork()> 0有什么区别?

时间:2019-12-03 05:31:10

标签: c fork

我正在构建一个小型测试服务器。这是它的主要部分:

    while(1){
    addr_size = sizeof(their_addr);
    debug("still working here my friend?");
    new_sock = accept(sockfd,(struct sockaddr*)&their_addr,&addr_size);
    if(new_sock == -1){
        debug("cant find sockfd");
        continue;
    }
    debug("pid: %d",getpid());
    if(fork() >0){ 

        close(sockfd);
        while(1){ //this snippet works fine
            debug("start reading");
            read_some(new_sock,buffer);
            bstring data = RingBuffer_get_all(buffer);
            rs = process_request(&root,bdata(data)); 
            byte_send = send(new_sock,rs,strlen(rs),0);
        }

        close(new_sock);
        exit(0);    
    }
    close(new_sock);
}

运行服务器时,每当我关闭客户端连接时,服务器也会自动退出。但是,当我将fork() >0更改为!fork()时并没有发生。 (fork() >0)!fork()总是可以在这里创建新流程时有什么区别?

1 个答案:

答案 0 :(得分:2)

fork()可以返回正数,零和-1,以防发生错误。

通过将fork() > 0(对于正数为True)更改为! fork()(对于非零为True),您将fork()的成功执行与失败的情况相结合fork()返回-1

不,他们不能总是创建新流程,有时会失败。