加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

看lighttpd源码,发现的实用小程序段

(2005-12-09 16:19:19)
分类: unix c编程
  
 
下面的创建很多进程是能用到的,比较巧妙的方法,以前也见过。现在给摘录下来。
              
#ifdef HAVE_FORK    
        /* start watcher and workers */
        num_childs = srv->srvconf.max_worker;
        if (num_childs > 0) {
                int child = 0;
                while (!child && !srv_shutdown) {
                        if (num_childs > 0) {
                                switch (fork()) {
                                case -1:
                                        return -1;
                                case 0:
                                        child = 1;
                                        break;
                                default:
                                        num_childs--;
                                        break;
                                }
                        } else {              
                                int status;
                                wait(&status);
                                num_childs++;
                        }
                      
                if (!child) return 0;
        }
#endif
 
 
 
 
*********************************************************
 
关闭无用的标准输入和输出。写服务器程序时用的到。
还有 -1 != xx 这种把常量放左边的写法可以有效的避免将“==”写成“=”。
 
/* close stdin and stdout, as they are not needed */

        /* move stdin to /dev/null */
        if (-1 != (fd = open("/dev/null", O_RDONLY))) {    
                close(STDIN_FILENO);   
                dup2(fd, STDIN_FILENO);
                close(fd);
        }
                                             
        /* move stdout to /dev/null */ 
        if (-1 != (fd = open("/dev/null", O_WRONLY))) {
                close(STDOUT_FILENO);
                dup2(fd, STDOUT_FILENO);
                close(fd);                    
        }
 
 
 
 
 
 
 
 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有