真的郁闷了,求教linux C语言strstr函数有关问题
真的郁闷了,求教linux C语言strstr函数问题
首先说明一下我想实现的目的,我想视线循环监测sd卡是否存在和挂载节,所以就开了一个线程下面贴上我的检测sd卡函数代码:
下面是线程函数大致代码:
其中/proc/partitions是linux下记录外接存储设备挂载节点的文件,而sd卡的一般挂载节点为mmcblk0p*,我实现方法是,将文件内容读入read_buf中,从read_buf中找到mmcblk0p字符串,如果找到了sd卡存在,挂载节点也找到了,找不到,sd卡不存在!
现在问题是:read_buf打印出来明明有mmcblk0p1,但是却检测不到sd卡,下面贴上我执行结果的截图:
各位大神啊,郁闷坏我了,到底错在哪里了呢,求救!
------解决方案--------------------
你确定有"mmcblk0p1"???!!!
目测没有,打印不出来是因为返回null
------解决方案--------------------
首先说明一下我想实现的目的,我想视线循环监测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卡,下面贴上我执行结果的截图:
各位大神啊,郁闷坏我了,到底错在哪里了呢,求救!
strstr
存储卡
------解决方案--------------------
你确定有"mmcblk0p1"???!!!
目测没有,打印不出来是因为返回null
------解决方案--------------------
ret=strstr(read_buf,"mmcblk0p"); /////仔细检查一下你匹配的字符串