2632|1

406

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

程序编译错误 [复制链接]

  1. #include<dirent.h>

  2. #include<stdio.h>

  3. #include<string.h>



  4. #define SE_SUCCESS  0

  5. #define SE_ERROR   -1

  6. #define CLRF "\r\n"



  7. #define MAXLEN 10240    //读取的文件最大字节数



  8. unsigned char  g_NewVersion[10];       //版本号



  9. static char  read_config(char * pParam, char * pValue, char * pFileName);

  10. static char* ReadVersion(char *dest);


  11. int main(int argc, char **argv[])
  12. {
  13.    char *buf;
  14.    ReadVersion(buf);


  15. }





  16. //寻找进程所属文件位置,并输出版本号

  17. char* ReadVersion(char *dest)

  18. {

  19.     DIR *dir;

  20.         int i=0;

  21.         int pos=0;

  22.     struct dirent *ptr;

  23.     FILE *fp;

  24.     char filepath[50];//大小随意,能装下cmdline文件的路径即可

  25.     char filetext[50];//大小随意,能装下要识别的命令行文本即可

  26.         char version[10]; //进程的版本号

  27.         char *pVersion;

  28.         char *ProcessName;

  29.         char *s;

  30.     dir = opendir("/proc"); //打开系统所有进程ID所在路径
  31.   //  printf("%s",dir->d_name);

  32.     if (NULL != dir)

  33.     {

  34.         while ((ptr = readdir(dir)) != NULL) //循环读取路径下的每一个文件/文件夹

  35.         {

  36.                 //        i++;
  37.          //   printf("%s \n",ptr->d_name);

  38.             //如果读取到的是"."或者".."则跳过,读取到的不是文件夹名字也跳过

  39.             if ((strcmp(ptr->d_name, ".") == 0) || (strcmp(ptr->d_name, "..") == 0)) continue;

  40.        //     if (DT_DIR != ptr->d_type) continue;

  41.               if(!isdigit(ptr->d_name)) continue;

  42.             sprintf(filepath, "/proc/%s/status", ptr->d_name);//生成要读取的版本配置文件的路径
  43.              printf("%s \n",filepath);

  44.   //          fp = fopen(filepath, "r");//打开文件

  45.                         i++;

  46.                 //        Version = read_version(("CUR_VERSION", pVersion, g_tInfo.VerName ));   //读取版本文件

  47.                         if ( read_config("Process_VERSION", pVersion, filepath) == -1 )          //返回的是版本号

  48.                               {

  49.                                     printf("read Process_VERSION error \n");

  50.                                 //    return -1;

  51.                               }

  52.                         else  {

  53.                                      strcpy(version, pVersion);

  54.                                  //   version = read_config("Process_VERSION", pVersion, filepath);

  55.                         //                return  version;

  56.                               }

  57.                                   

  58.                         if ( read_config("Name", pVersion, filepath) == -1)

  59.                         {

  60.                              printf("read Name error \n");

  61.                                 //  return -1;

  62.                         }

  63.                         else  {

  64.                                     strcpy(ProcessName, pVersion);

  65.                         //                ProcessName = read_config("Name", pVersion, filepath);

  66.                         //                return  version;

  67.                               }       

  68.                         sprintf(s, "%s%s",ProcessName,version);       

  69.                 //        strcpy(temp,s);

  70.         //                dest[pos++] = s;

  71.                         return dest;          

  72.                        

  73. /*          if (NULL != fp)

  74.             {

  75.                 fread(filetext, 1, 50, fp);//读取文件

  76.                 filetext[49] = '\0';//给读出的内容加上字符串结束符

  77.                 //如果文件内容满足要求则打印路径的名字(即进程的PID)

  78.                 if (filetext == strstr(filetext, "status.ini"))     //若读取内容是版本文件

  79.                                        

  80.                                        

  81.                                         printf("PID:  %s\n", ptr->d_name);

  82. */                                       

  83. //                fclose(fp);

  84. //           }

  85.            

  86.         }

  87.         closedir(dir);//关闭路径

  88.     }

  89. }





  90. //读取文件

  91. char read_config(char * pParam,

  92.                                 char * pValue,

  93.                                 char * pFileName)

  94. {

  95.         FILE *fp;

  96.         int accLen=0,bytes_read;       

  97.         char buffer[10240]="\0";       

  98.         char tmpValue[128]="\0";

  99.         char* match;       



  100.         fp = fopen(pFileName,"r");       

  101.         if (fp <= 0)

  102.         {                

  103.                 printf("%s\n","Read config File Fail......");

  104.                 return SE_ERROR;

  105.         }                 



  106.         bytes_read = fread(buffer, 1, sizeof(buffer),fp);        

  107.        

  108.         fclose(fp);

  109.        

  110.         if (bytes_read == 0 || bytes_read == sizeof(buffer))    //可能存在问题

  111.         {       

  112.                 return SE_ERROR;

  113.         }       



  114.         buffer[bytes_read] = '\0';        

  115.        

  116.         match =(char *) strstr(buffer, pParam);

  117.         if (match == NULL)

  118.         {               

  119.                 return SE_ERROR;

  120.         }

  121.        

  122.         match =(char *) strchr(match, ':');

  123.        

  124.         if (match == NULL)

  125.         {               

  126.                 return SE_ERROR;

  127.         }

  128.                         

  129.         accLen = strcspn(match+1,CLRF);

  130.         if(accLen>0)

  131.         {

  132.                 strncpy(tmpValue,match+1,accLen);

  133.                 strcpy(pValue, tmpValue);

  134.         //        return  accLen;

  135.         }               

  136.         return SE_SUCCESS;
  137. }
复制代码





编译后,出现‘ Segmentation fault (core dumped)’的问题
此帖出自Linux开发论坛

最新回复

首先,这个Segmentation fault不是编译出的错误吧?这个应该是运行时程序跑飞了报出的错吧。看你的log显示,core文件已经生成。用gdb调试一下很快就能定位出问题了。如果不会,网上有很多教程的,很好搜。  详情 回复 发表于 2017-2-19 10:23
点赞 关注

回复
举报

493

帖子

1

TA的资源

一粒金砂(高级)

沙发
 
首先,这个Segmentation fault不是编译出的错误吧?这个应该是运行时程序跑飞了报出的错吧。看你的log显示,core文件已经生成。用gdb调试一下很快就能定位出问题了。如果不会,网上有很多教程的,很好搜。
此帖出自Linux开发论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表