标准输出重定向加管道,获取system命令执行结果
2014-02-28 15:57
816 查看
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
static int getResultFromSystemCall(const char* pCmd, char* pResult, int size)
{
int fd[2];
if(pipe(fd)) {
printf("pipe error!\n");
return -1;
}
//prevent content in stdout affect result
fflush(stdout);
//hide stdout
int bak_fd = dup(STDOUT_FILENO);
int new_fd = dup2(fd[1], STDOUT_FILENO);
//the output of `pCmd` is write into fd[1]
system(pCmd);
read(fd[0], pResult, size-1);
pResult[strlen(pResult)-1] = 0;
//resume stdout
dup2(bak_fd, new_fd);
return 0;
}
int main(void)
{
char* filePath = "./test.conf";
char* key = "aaa";
char res[100] = {0};
char cmd[100] = {0};
sprintf(cmd, "cat %s | grep -m 1 -E \"^%s\" | cut -d= -f2 | sed 's/[[:space:]]*//g'", filePath, key);
getResultFromSystemCall(cmd, res, sizeof(res)/sizeof(res[0]));
//getResultFromSystemCall("export aaa=1234 && echo ${aaa#=}", res, sizeof(res)/sizeof(res[0]));
printf("result is [%s]\n", res);
return 0;
}
转自:http://www.oschina.net/code/snippet_616273_14056#viewSource
dup和dup2使用
/article/6134116.html
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
static int getResultFromSystemCall(const char* pCmd, char* pResult, int size)
{
int fd[2];
if(pipe(fd)) {
printf("pipe error!\n");
return -1;
}
//prevent content in stdout affect result
fflush(stdout);
//hide stdout
int bak_fd = dup(STDOUT_FILENO);
int new_fd = dup2(fd[1], STDOUT_FILENO);
//the output of `pCmd` is write into fd[1]
system(pCmd);
read(fd[0], pResult, size-1);
pResult[strlen(pResult)-1] = 0;
//resume stdout
dup2(bak_fd, new_fd);
return 0;
}
int main(void)
{
char* filePath = "./test.conf";
char* key = "aaa";
char res[100] = {0};
char cmd[100] = {0};
sprintf(cmd, "cat %s | grep -m 1 -E \"^%s\" | cut -d= -f2 | sed 's/[[:space:]]*//g'", filePath, key);
getResultFromSystemCall(cmd, res, sizeof(res)/sizeof(res[0]));
//getResultFromSystemCall("export aaa=1234 && echo ${aaa#=}", res, sizeof(res)/sizeof(res[0]));
printf("result is [%s]\n", res);
return 0;
}
转自:http://www.oschina.net/code/snippet_616273_14056#viewSource
dup和dup2使用
/article/6134116.html
相关文章推荐
- iis php exec() system() 命令无法执行,通过cmd执行PHP可输出执行的cmd结果
- 用NSTask执行外部命令并获取输出结果的方法
- 用NSTask执行外部命令并获取输出结果的方法
- 服务端用system()执行shell命令获取执行结果(排除signal影响)
- shell基础-输入输出以及重定向/多命令顺序执行与管道符/通配符与特殊符号
- 从使用os.system)在python命令(重定向标准输入输出
- 用NSTask执行外部命令并获取输出结果的方法
- 用NSTask执行外部命令并获取输出结果的方法
- Cocoa中用NSTask执行外部命令并获取输出结果的方法
- VC调用CMD命令通过控制台管道获取输出结果
- 使用Java代码执行系统命令/shell命令, 并获取输出结果
- 用NSTask执行外部命令并获取输出结果的方法
- 获取dos命令执行的结果(管道)(VB6和C#)
- 【转】C#执行命令行程序/命令并获取输出结果
- Linux&nbsp;命令执行结果同时输出至屏幕…
- C# 动态输出Dos命令执行结果
- c#.NET 调用命令控制台 并获取执行结果
- quick-cocos2d-x 执行系统命令system( "rd /s /q xxx")后,print("...")输出都乱了
- 在.net中悄悄执行dos命令,并获取执行的结果
- java使用Runtime.exec执行linux命令重定向或管道问题