如何在C代码中读取终端命令执行结果输出
2014-06-19 12:08
483 查看
使用shell脚本或命令,可以很方便的获取到我们需要的信息。因此,有“一条shell命令顶100行代码”之说。比如free,本身是busybox中的关于内存操作的C代码编译出来的可执行命令。如果在我们自己写的代码中要集成这个功能,把代码移过来是一种方式,但是少不了的是工作量。如果是复杂的命令,还得费点周折。如果能直接读到命令执行结果,这可以减少工作量。
要实现这样的功能,大概有一下几步:
1、popen(cmd), cmd是要执行的命令。
2、将popen执行的结果保存到一个stream里面。
3、使用sscanf或者使用fscanf从结果中提取想要的字段。
以获取系统时间为例给出一段代码:
FILE *output;
char *script,
FILE *wstream;
script = "date";
output = popen(script, "r");
//-----------------------------分割线------------------------------------------------------//
wstream = fopen( "radio_time.txt", "w+"); //新建一个可写的文件
fread( buf, sizeof(char), sizeof(buf), output); //将数据流读取到buf中
/* Thu Jan 1 02:02:37 UTC 1970 */ //举例,输出的时间格式为这个
sscanf(buf, "%s %s %d %2d:%2d:%2d %*s %4d", tm_wday, tm_mon, &tm_mday, &tm_hour, &tm_min, &tm_sec, &tm_year); //%*s表示忽略该字段
printf("time is %4d-%s-%d-%2d:%2d:%2d\n", tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec);
fwrite( buf, 1, sizeof(buf), wstream );//将buf中的数据写到FILE *wstream对应的流中,也是写到文件中
pclose( output );
fclose( wstream );
//------------------------------END--------------------------------------------------------//
对output可以用fscanf提取,因此以上分隔线中的代码有另外一种写法:
while ( !(feof(output) )) {
fscanf(output, "%s %s %d %2d:%2d:%2d %*s %4d", tm_wday, tm_mon, &tm_mday, &tm_hour, &tm_min, &tm_sec, &tm_year); //%*s表示忽略该字段
/* 忽略其它行 */
while (('\n' != fgetc(output)) && !feof(output)) {}
}
pclose(output);
要实现这样的功能,大概有一下几步:
1、popen(cmd), cmd是要执行的命令。
2、将popen执行的结果保存到一个stream里面。
3、使用sscanf或者使用fscanf从结果中提取想要的字段。
以获取系统时间为例给出一段代码:
FILE *output;
char *script,
FILE *wstream;
script = "date";
output = popen(script, "r");
//-----------------------------分割线------------------------------------------------------//
wstream = fopen( "radio_time.txt", "w+"); //新建一个可写的文件
fread( buf, sizeof(char), sizeof(buf), output); //将数据流读取到buf中
/* Thu Jan 1 02:02:37 UTC 1970 */ //举例,输出的时间格式为这个
sscanf(buf, "%s %s %d %2d:%2d:%2d %*s %4d", tm_wday, tm_mon, &tm_mday, &tm_hour, &tm_min, &tm_sec, &tm_year); //%*s表示忽略该字段
printf("time is %4d-%s-%d-%2d:%2d:%2d\n", tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec);
fwrite( buf, 1, sizeof(buf), wstream );//将buf中的数据写到FILE *wstream对应的流中,也是写到文件中
pclose( output );
fclose( wstream );
//------------------------------END--------------------------------------------------------//
对output可以用fscanf提取,因此以上分隔线中的代码有另外一种写法:
while ( !(feof(output) )) {
fscanf(output, "%s %s %d %2d:%2d:%2d %*s %4d", tm_wday, tm_mon, &tm_mday, &tm_hour, &tm_min, &tm_sec, &tm_year); //%*s表示忽略该字段
/* 忽略其它行 */
while (('\n' != fgetc(output)) && !feof(output)) {}
}
pclose(output);
相关文章推荐
- android代码执行adb shell终端命令(linux命令)并返回执行结果
- 使用Java代码执行系统命令/shell命令, 并获取输出结果
- 在android中如何编译连接 .c 的可执行文件 Android点滴(1) -- 执行Linux命令并且获得输出的结果
- 如何将linux 命令的执行结果在屏幕输出的同时保存到文件
- 如何使ssh server env命令与在本地直接执行env命令后的输出结果相同
- 如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果
- 【转】C#执行命令行程序/命令并获取输出结果
- 如何察看liunx终端的执行命令历史
- 浅析Java执行外部命令的几个要点(3)——如何提取执行命令的标准输出
- 实现 java 执行 cmd 命令,打印输出,等待cmd 完全执行完成后才执行下面代码
- PHP设置一边执行一边输出结果的代码
- 执行shell命令并读取执行结果——popen()的用法
- 在AWK中执行命令并使用getline输出全部结果
- 实现 java 执行 cmd 命令,打印输出,等待cmd 完全执行完成后才执行下面代码 .
- 从键盘多行输入,写入TXT文件并读取输出~只显示第一行,如何解决?(答案见代码)
- 用NSTask执行外部命令并获取输出结果的方法
- 用shell命令读取与输出数据的代码
- java调用.bat,.cmd或执行cmd命令并将输出结果显示的代码
- 用NSTask执行外部命令并获取输出结果的方法
- Android点滴(1) -- 执行Linux命令并且获得输出的结果