C语言中linux下查看sd卡mount的位置

来源:互联网 发布:西恩潘演技知乎 编辑:程序博客网 时间:2024/06/05 11:36
linux 查找sd卡mount的位置:
#include<sstream> //std::istringstream
#include<stdio.h> //FILE and popen
#include<string>
......其他头文件......


std::string getSDCardPath();
主函数(getSDFCardPath);
......其他函数......
std::string getSDCardPath()
{
FILE *fp;
char buffer[80];
std::string str;
std::string tmpPath[3];
if((fp = popen("mount|grep /dev/sdcard",r)) == NULL)
std::cout << "failed" << std::endl;
//调用shell, r表示读,其中/dev/sdcard 是系统默认的sd卡的名字,也有可能是mmcblk0,mmcblk0p1
fgets(buffer,sizeof(char)*80,fp);//从fp中取出80个字到buffer中
std::string str(buffer);
std::istringstream iss;//按空格切分string 
for(int i = 0;i != 3;++i)
{
iss >> tmpPath[i];
}


return tmpPath[2];
}
说说popen函数:


FILE * popen ( const char * command , const char * type );
int pclose ( FILE * stream );
popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。这个进程必须由 


pclose() 函数关闭,而不是 fclose() 函数。pclose() 函数关闭标准 I/O 流,等待命令执行结束,然后返回 shell 的终止状


态。如果 shell 不能被执行,则 pclose() 返回的终止状态与 shell 已执行 exit 一样。
type 参数只能是读或者写中的一种,得到的返回值(标准 I/O 流)也具有和 type 相应的只读或只写类型。如果 type 是 "r" 


则文件指针连接到 command 的标准输出;如果 type 是 "w" 则文件指针连接到 command 的标准输入。
command 参数是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用-c 标志,shell 将执行


这个命令。
popen 的返回值是个标准 I/O 流,必须由 pclose 来终止。前面提到这个流是单向的。所以向这个流写内容相当于写入该命令


的标准输入;命令的标准输出和调用 popen 的进程相同。与之相反的,从流中读数据相当于读取命令的标准输出;命令的标准


输入和调用 popen 的进程相同。
函数的返回值:
如果调用 fork() 或 pipe() 失败,或者不能分配内存将返回NULL,否则返回标准 I/O 流。
popen 没有为内存分配失败设置 errno 值。
如果调用 fork() 或 pipe() 时出现错误,errno 被设为相应的错误类型。
如果 type 参数不合法,errno将返回EINVAL
istringstream的功能是网上查的,需要了解可以自行查看
0 0