Linux C编程:利用管道获取配置文件中的内容,并在C代码中直接处理

直接给代码,以下代码是在驱动配置文件中获取存在的字符串

#define SIZE 10

int main()
{
FILE *fp;
char buffer[SIZE];
char *cmd_str="cat /dev/mydevice | grep 0x1101";

memset(buffer,'\0',SIZE);
fp=popen(cmd_str,"r");
fread(buffer,SIZE,1,fp);
printf("strlen=%d\n",strlen(buffer)); //strlen大于0,说明获取到字符串
pclose(fp);

}

popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。

system就是执行shell命令最后返回是否执行成功,popen执行命令并且通过管道和shell命令进行通信。

system和popen都是执行了类似的运行流程,大致是fork->execl->return。但是我们看到system在执行期间调用进程会一直等待shell命令执行完成(waitpid等待子进程结束)才返回,但是popen无须等待shell命令执行完成就返回了。我们可以理解system为串行执行,在执行期间调用进程放弃了”控制权”,popen为并行执行。

https://linux.die.net/man/3/popen