zoukankan      html  css  js  c++  java
  • read 由于信号中断,没读到任何数据

    第一天写博客,想想写什么呢,突然想到一年前遇到的bug。好吧,就你了。

    代码:

    CfgRet getConfigfilePath(char *ConfigfilePath)

    {

        char line[64] = {0};

        char *pStr = NULL;

        char *firstChar;

       

        sprintf(line, "%s", "cfg_file_path.sh config");

        FILE *pp = popen(line, "r");

        if (pp != NULL)

        {

            char buf[256] = {0};

            pStr = fgets(buf, sizeof(buf), pp);

            if(pStr == NULL)

                printf("fgets exec error.\r\n");

            printf("config name length: %d\r\n",strlen(buf));

    ……..

        return CFG_RET_SUCCESS;

    }

    问题描述:

    在串口执行cfg_file_path.sh config能够标准输出config文件的路径。

    代码执行pStr = fgets(buf, sizeof(buf), pp);  有时fgets的返回值pStr为NULL,打印fgets exec error。

    代码修改:

    CfgRet getConfigfilePath(char *ConfigfilePath)

    {

        char line[64] = {0};

        char *pStr = NULL;

        char *firstChar;

       

        sprintf(line, "%s", "cfg_file_path.sh config");

        FILE *pp = popen(line, "r");

        if (pp != NULL)

        {

            char buf[256] = {0};

            do

            {

                       pStr = fgets(buf, sizeof(buf), pp);

                       if(feof(pp))

                       {

                                         printf("End of file\n");

                                         break;

                       }

            } while ((pStr == NULL) && (errno == EINTR));

            printf("config name length: %d\r\n",strlen(buf));

    ......

        return CFG_RET_SUCCESS;

    }

    问题分析:

    fgets会使用系统调用read,如果捕捉到SIGCHID,read调用就有被中断的可能。

    在该进程初始化的时候,移除对该信号的处理,也可以解决避免SIGCHID会read的影响。main.c  sigaction( SIGCHLD, &sa_child, 0 );

  • 相关阅读:
    服务器变量 $_SERVER 详解
    PHP 函数功能参考
    ecshop后台0day漏洞原理+利用方法 XSS+Getshll
    CSRF漏洞原理说明与利用方法
    Drupal 远程命令执行漏洞(CVE-2018-7600)
    SSH登陆验证绕过漏洞(cve-2018-10933)
    单元二:建立和维护数据表
    单元一:认识数据库系统
    【 模块1 认识计算机 】1.2 认识微型计算机
    【 模块1 认识计算机 】 1.1走进计算机世界
  • 原文地址:https://www.cnblogs.com/nullbaby/p/7064840.html
Copyright © 2011-2022 走看看