真的郁闷了,求教linux C语言strstr函数问题

lishi_1991 2013-11-07 08:24:44
首先说明一下我想实现的目的,我想视线循环监测sd卡是否存在和挂载节,所以就开了一个线程下面贴上我的检测sd卡函数代码:
int checkSdCardMountPoint(char *sdMountStr){
FILE *fp=NULL;
char *partitionFilePath = "/proc/partitions";
char buf[500]="";
char read_buf[1000] = "";
char *ret[500] = "";
char *fget_ret[500] = "";
int len = 0;
int result = -1;
memset(read_buf,0,sizeof(char)*1000);
memset(ret,0,sizeof(char)*500);
memset(fget_ret,0,sizeof(char)*500);
fp = fopen(partitionFilePath,"rb");
if(fp == NULL){
printf("%s open failed!\n",partitionFilePath);
return -1;
}

while(feof(fp) == 0){
memset(buf,0,sizeof(char)*500);
fget_ret=fgets(buf,sizeof(buf),fp);
if(fget_ret == NULL){
break;
}
strcat(read_buf,buf);
}
#if 1
printf("read_buf = %s\n",read_buf);
ret=strstr(read_buf,"mmcblk0p");
printf("ret = %s\n",ret);
if(ret != NULL){
printf("have found sd card\n");
//strcpy(sdMountStr,ret);
len = strlen(ret);
memcpy(sdMountStr,ret,len-1);
sdMountStr[len]='\0';
result = 1;
}
#endif
if(fp){
fclose(fp);
fp=NULL;
}
printf("\r result = %d\n",result);
return result;
}

下面是线程函数大致代码:
void *checkSdThread(void *arg)
{
char sdcard_mount_point[80]="";
sdFlag = 0;
while(1)
{
if(checkSdCardMountPoint(sdcard_mount_point) < 0){
printf("$$$ not found sdcard $$$\n");
}else{

}
}
sleep(1);
}
return NULL;
}

其中/proc/partitions是linux下记录外接存储设备挂载节点的文件,而sd卡的一般挂载节点为mmcblk0p*,我实现方法是,将文件内容读入read_buf中,从read_buf中找到mmcblk0p字符串,如果找到了sd卡存在,挂载节点也找到了,找不到,sd卡不存在!
现在问题是:read_buf打印出来明明有mmcblk0p1,但是却检测不到sd卡,下面贴上我执行结果的截图:
各位大神啊,郁闷坏我了,到底错在哪里了呢,求救!
...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
N_Sev7 2013-11-07
  • 打赏
  • 举报
回复
引用 8 楼 lishi_1991 的回复:
我擦,看出来了,一直都是mmcblk1p* 突然变了,惯性思维害死人!多谢各位提醒啊
以为我年纪大了,眼睛不好使了呢
N_Sev7 2013-11-07
  • 打赏
  • 举报
回复
"mmcblk0p" 你匹配的字符串 "mmcblk1p1"你标记的字符串 不明白为什么你说打印出来了"mmcblk0p"
lishi_1991 2013-11-07
  • 打赏
  • 举报
回复
我擦,看出来了,一直都是mmcblk1p* 突然变了,惯性思维害死人!多谢各位提醒啊
lishi_1991 2013-11-07
  • 打赏
  • 举报
回复
引用 5 楼 vrace 的回复:
你的输出确实没看见 mmcblk0p 啊...
画红线部分
N_Sev7 2013-11-07
  • 打赏
  • 举报
回复
引用 4 楼 lishi_1991 的回复:
[quote=引用 2 楼 N_sev7 的回复:] 你确定有"mmcblk0p1"???!!! 目测没有,打印不出来是因为返回null
有啊,read_buf最后不是打印出来了mmcblockp1[/quote]

    ret=strstr(read_buf,"mmcblk0p");  /////仔细检查一下你匹配的字符串
vrace 2013-11-07
  • 打赏
  • 举报
回复
你的输出确实没看见 mmcblk0p 啊...
lishi_1991 2013-11-07
  • 打赏
  • 举报
回复
引用 2 楼 N_sev7 的回复:
你确定有"mmcblk0p1"???!!! 目测没有,打印不出来是因为返回null
有啊,read_buf最后不是打印出来了mmcblockp1
lishi_1991 2013-11-07
  • 打赏
  • 举报
回复
再补充一下,如果一开始插了存储卡,执行结果是正常的,result = 1;但是printf("ret = %s\n",ret);还是不打印,拔下存储卡,会出现如下结果:
再插上存储卡就会出现上面执行的结果!
各位求教,求指点迷津啊
N_Sev7 2013-11-07
  • 打赏
  • 举报
回复
你确定有"mmcblk0p1"???!!! 目测没有,打印不出来是因为返回null
lishi_1991 2013-11-07
  • 打赏
  • 举报
回复
再贴上一条比较全的执行结果

最郁闷的是为什么连printf("ret = %s\n",ret);都不打印呢

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧