<pre name="code" class="cpp">int fd[2];
int bak_fd, new_fd;
int ret;
char buf[1024];
if (pipe(fd)){ perror("pipe"); return;}
bak_fd = dup(STDOUT_FILENO);
new_fd = dup2(fd[1], STDOUT_FILENO);
system(some_cmd);
ret = read(fd[0], buf, sizeof(buf));
if (ret <=0 ){ perror("read"); return;}
dup(bak_fd, new_fd);
与popen的非阻塞不同,该实现方式会再system执行命令时阻塞。