linux popen 同时读写,在Linux中使用popen的例子

本文探讨在Linux环境下,如何使用popen函数执行脚本并获取其输出。重点讲解遇到脚本提前退出时popen行为,以及如何解析popen返回的文件中包含的数据。实例以C代码和脚本配合说明,涉及错误处理和结果解析技巧。

在Linux下进行编写程序的时候,如果需要执行一段脚本,并且需要获取脚本执行的结果,按么最好使用popen。下面就举一个例子:

c代码文件为: 3.C,内容如下:

#include  

#include

#include  

#include  

#include  

#include

typedef struct tag_Result

{

char filename[100];

int filesize;

tag_Result()

{

filename[0] = '0';

filesize    = 0;

}

}RESULT,*LPRESULT;

int   WriteFile(const   char   *filename,const   char   *pFile,const   int   nLen)

{

FILE   *stream=NULL;

stream=fopen(filename,"w+");

if(stream==NULL)

{

perror("Open   file   error");

return   -1;

}

if(fwrite((void   *)pFile,1,nLen,stream)!=nLen)

{

perror("Write   file   error");

fclose(stream);

return   -1;

}

fclose(stream);

return   0;

}

int   main()

{

RESULT res;

FILE   *pStream = NULL;

char   buf[4096]={""};

char dddd[10]={""};

char cccc[100]={""};

pStream=popen("a","r");

if(pStream)

{

fscanf(pStream,"%[^';'];%[^';'];%s",res.filename,cccc,dddd);

cout<

cout<

res.filesize = atoi(dddd);

cout<

sprintf(buf,"%s,%d",res.filename,res.filesize);

WriteFile("result.txt",buf,strlen(buf));

pclose( pStream);

}

else

{

cout<

}

return 1;

}

要执行的脚本名称为a,脚本内容为:

#!/bin/sh

#filename: a

fileinfo=11

rm fileinfo #>/dev/null 2>

echo -n $fileinfo";" >> fileinfo

echo -n $fileinfo";" >> fileinfo

ls -l $fileinfo | awk '{print $5 }' >> fileinfo

cat fileinfo

通过:g++ -o 11 3.C  编译c代码生成可执行文件为:11,直接执行11,就可以查看到结果.

1.问题1: 如果脚本a在第3行的时候,直接就通过exit 1返回了,那么通过popen打开执行这个脚本会出现什么结果呢?

如果脚本直接返回,相当于脚本没有向popen打开的文件中写入任何数据,也就是说popen相当于打开了一个空文件.

2.问题2: popen打开的文件中获取的是什么数据?

获取的就是脚本输出到标准输出的数据。0b1331709591d260c1c78e86d0c51c18.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值