当前位置:  技术问答>linux和unix

编程问题

    来源: 互联网  发布时间:2014-11-19

    本文导语:  mainInitialize(void) {     static int first_time = 1;     if (opt_catch_signals) {     squid_signal(SIGSEGV, death, SA_NODEFER | SA_RESETHAND);     squid_signal(SIGBUS, death, SA_NODEFER | SA_RESETHAND);     }     squid_signal(SIGPIPE, SIG_IGN, ...

mainInitialize(void)
{
    static int first_time = 1;
    if (opt_catch_signals) {
    squid_signal(SIGSEGV, death, SA_NODEFER | SA_RESETHAND);
    squid_signal(SIGBUS, death, SA_NODEFER | SA_RESETHAND);
    }
    squid_signal(SIGPIPE, SIG_IGN, SA_RESTART);
    squid_signal(SIGCHLD, sig_child, SA_NODEFER | SA_RESTART);

    if (ConfigFile == NULL)
    ConfigFile = xstrdup(DefaultConfigFile);
    parseConfigFile(ConfigFile);
    setEffectiveUser();
    if (httpPortNumOverride != 1)
    Config.Port.http = (u_short) httpPortNumOverride;
    if (icpPortNumOverride != 1)
    Config.Port.icp = (u_short) icpPortNumOverride;

    _db_init(Config.Log.log, Config.debugOptions);
    fdstat_open(fileno(debug_log), FD_LOG);
    fd_note(fileno(debug_log), Config.Log.log);

    debug(1, 0, "Starting Squid Cache version %s for %s...n",
    version_string,
    CONFIG_HOST_TYPE);
    debug(1, 1, "With %d file descriptors availablen", Squid_MaxFD);

    if (first_time) {
    stmemInit();        /* stmem must go before at least redirect */
    disk_init();        /* disk_init must go before ipcache_init() */
    }
    ipcache_init();
    fqdncache_init();
    dnsOpenServers();
    redirectOpenServers();
    useragentOpenLog();
#if 0 /* USE_V6_LOCALHOST */
    ftpInitialize6();
#endif
    ftpInitialize();

#if MALLOC_DBG
    malloc_debug(0, malloc_debug_level);
#endif

    if (first_time) {
    unlinkdInit();
    /* module initialization */
    urlInitialize();
    stat_init(&HTTPCacheInfo, Config.Log.access);
    stat_init(&ICPCacheInfo, NULL);
    storeInit();
#if FORW_VIA_LOG
    icpInit(0);
#endif

    if (Config.effectiveUser) {
        /* we were probably started as root, so cd to a swap
         * directory in case we dump core */
        if (chdir(swappath(0)) = 0 && (!httpd_accel_mode || Config.Accel.withProxy))
    neighbors_open(theOutIcpConnection);

    if (first_time)
    writePidFile();        /* write PID file */

    squid_signal(SIGUSR1, rotate_logs, SA_RESTART);
    squid_signal(SIGUSR2, sigusr2_handle, SA_RESTART);
    squid_signal(SIGHUP, reconfigure, SA_RESTART);
    squid_signal(SIGTERM, shut_down, SA_NODEFER | SA_RESETHAND | SA_RESTART);
    squid_signal(SIGINT, shut_down, SA_NODEFER | SA_RESETHAND | SA_RESTART);
    debug(1, 0, "Ready to serve requests.n");

    if (first_time) {
    eventAdd("storePurgeOld", storePurgeOld, NULL, Config.cleanRate);
    eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1);
    eventAdd("storeDirClean", storeDirClean, NULL, 15);
    if (Config.Announce.on)
        eventAdd("start_announce", start_announce, NULL, 3600);
    eventAdd("ipcache_purgelru", (EVH) ipcache_purgelru, NULL, 10);
    }
    first_time = 0;
}

void
有太多不懂的地方了,请各位大霞给看看,整段程序是什么意思,还有细节的部分也讲讲,比如0,1,-1是什么作用 

|
怎么看起来像是squid的源程序?只能大概说一些:

mainInitialize(void)
{

/*第一次标志*/
    static int first_time = 1;

/*处理溢出信号*/
    if (opt_catch_signals) {
    squid_signal(SIGSEGV, death, SA_NODEFER | SA_RESETHAND);
    squid_signal(SIGBUS, death, SA_NODEFER | SA_RESETHAND);
    }
/*忽略管道信号*/
    squid_signal(SIGPIPE, SIG_IGN, SA_RESTART);
/*接受子进程信号*/
    squid_signal(SIGCHLD, sig_child, SA_NODEFER | SA_RESTART);

/*判断是否有配置文件,如果有的话,打开并解析*/
    if (ConfigFile == NULL)
    ConfigFile = xstrdup(DefaultConfigFile);
    parseConfigFile(ConfigFile);

/*猜想是设置有效的用户*/
    setEffectiveUser();

/*重用端口?*/
    if (httpPortNumOverride != 1)
    Config.Port.http = (u_short) httpPortNumOverride;
    if (icpPortNumOverride != 1)
    Config.Port.icp = (u_short) icpPortNumOverride;

/*初始化debug文件,并记录一些debug信息*/
    _db_init(Config.Log.log, Config.debugOptions);
    fdstat_open(fileno(debug_log), FD_LOG);
    fd_note(fileno(debug_log), Config.Log.log);

    debug(1, 0, "Starting Squid Cache version %s for %s...n",
    version_string,
    CONFIG_HOST_TYPE);
    debug(1, 1, "With %d file descriptors availablen", Squid_MaxFD);

/*如果是首次启动初始化内存?和硬盘空间*/
    if (first_time) {
    stmemInit();        /* stmem must go before at least redirect */
    disk_init();        /* disk_init must go before ipcache_init() */
    }
/*启动一些进程并连接DNS服务器 重定向服务,并初始化用户的log*/
    ipcache_init();
    fqdncache_init();
    dnsOpenServers();
    redirectOpenServers();
    useragentOpenLog();
/*是否用ipv6*/
#if 0 /* USE_V6_LOCALHOST */
    ftpInitialize6();
#endif
    ftpInitialize();

#if MALLOC_DBG
    malloc_debug(0, malloc_debug_level);
#endif

/*如果第一次启动初始化*/
    if (first_time) {
    unlinkdInit();
    /* module initialization */
    urlInitialize();
    stat_init(&HTTPCacheInfo, Config.Log.access);
    stat_init(&ICPCacheInfo, NULL);
    storeInit();
#if FORW_VIA_LOG
    icpInit(0);
#endif

/*将coredown后的内存映像转存到/目录下*/
    if (Config.effectiveUser) {
        /* we were probably started as root, so cd to a swap
         * directory in case we dump core */
        if (chdir(swappath(0)) = 0 && (!httpd_accel_mode || Config.Accel.withProxy))
    neighbors_open(theOutIcpConnection);

/*将进程ID写到对应的pid文件中*/
    if (first_time)
    writePidFile();        /* write PID file */


    squid_signal(SIGUSR1, rotate_logs, SA_RESTART);
    squid_signal(SIGUSR2, sigusr2_handle, SA_RESTART);
    squid_signal(SIGHUP, reconfigure, SA_RESTART);
    squid_signal(SIGTERM, shut_down, SA_NODEFER | SA_RESETHAND | SA_RESTART);
    squid_signal(SIGINT, shut_down, SA_NODEFER | SA_RESETHAND | SA_RESTART);
    debug(1, 0, "Ready to serve requests.n");

/*添加一些事件处理函数*/
    if (first_time) {
    eventAdd("storePurgeOld", storePurgeOld, NULL, Config.cleanRate);
    eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1);
    eventAdd("storeDirClean", storeDirClean, NULL, 15);
    if (Config.Announce.on)
        eventAdd("start_announce", start_announce, NULL, 3600);
    eventAdd("ipcache_purgelru", (EVH) ipcache_purgelru, NULL, 10);
    }
    first_time = 0;
}




    
 
 

您可能感兴趣的文章:

  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • 请教一个shell编程的问题,就是如何在shell编程中读一个文件的内容?谢谢啦!
  • 初学者问题,哪里有适合入门的编程电子书看 linux 下 c编程
  • 菜鸟问题:请问要在Linux操作系统下完成TCP/IP网络编程,用什么编程工具好?
  • UNIX环境高级编程里一个SOCKET编程的例子问题
  • [学习UNIX编程]初学UNIX编程,遇到一个小小的问题,烦劳大虾帮忙解惑,谢谢!
  • 一个小问题。Linux下编程语言的问题。
  • 我初学 Unix 编程,在看《Unix环境高级编程》时有一个问题请指教。
  • 求助linux下的网络编程问题
  • linux下网络编程环境配置问题
  • 关于声卡编程的问题
  • 菜鸟问题:现在要做unix下的c/c+编程的几个问题?
  • 菜鸟问题,在jbuilder中的编程小问题
  • openssl编程问题,菜问题
  • 千分求Linux 下数据库编程的问题!急!
  • 急!!请教关于linux socket编程的一个问题!!
  • linux内核编程问题
  • linux下socket编程问题!
  • 初学unix编程遇到的一个问题?
  • 请问 在fedora6.0,TCshell编程问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 都说《UNIX环境高级编程》好,对于学linux编程好不好?《Linux下的c编程》《嵌入式系统C编程》那个更适合初学者?各是那个出版社的?(
  • 2013年7月和2013年8月编程语言排行榜
  • daemon 是属于 用户态编程 还是 内核态编程? 关于内核编程的书/资料介绍些好吗?
  • 苹果OS X和IOS下最新编程语言swift介绍
  • 请教linux下的编程的选择:我听说有gtk+gnome的编程,也有kde里的 什么编程,到底应该选择哪个呢?好象一个是技术好一点,一个是市场占有
  • 学不好编程的三个原因
  • unix编程与linux编程有什么区别?
  • 半路出家转行学编程如何才能成为大牛?
  • 我想学Linux编程,请大家推荐几本学习Linux下C/C++编程的书
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • Linux下的编程指的就是Shell编程吗?
  • PHP编程需要注意地方总结
  • linux下编程跟平时的编程有什么区别吗?
  • PHP编程语言介绍及安装测试方法
  • 那里有《shell编程》和关于curses编程的教程可以下载,请帮忙?
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 学Linux编程前要学Unix吗?哪里有学Linux编程的好书下载?
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • Linux C编程一站式学习,高级shell Bash脚本编程指南,
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • 本人刚学gtk编程,留下油箱,欢迎喜欢gtk编程的朋友和我交流啊!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3