1,输出重定向实现
此方法比较简单,步骤如下
1)system("date > tmp.txt"); --将date指令的输出重定向到tmp.txt文件中
2)使用open();read();等操作函数来获取tmp.txt的内容
2,重定向标准标准输出+管道实现
1)将标准输出重定向到管道:
int fd[2],backfd;
pipe(fd);
backfd=dup(STDOUT_FILENO); --备份标准输出,永远恢复
dup2(fd[1],STDOUT_FILENO); --将标准输出重定向到匿名管道输入端
2)执行system();
system("date");
3)获取结果并恢复标准输入
read(fd[0],buf,1024);
dup2(backfd,STDOUT_FILENO);
3,使用popen函数
FILE *fp = popen("date","r");
fread(buff,1024,1,fp);
pclose(fp);//注意使用popen需要使用pclose来关闭,不然会造成内存泄漏
4,完整代码
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(void)
{
char buf[1024]={0};
int fd[2];
int backfd;
pipe(fd);
backfd=dup(STDOUT_FILENO);//备份标准输出,用于恢复
dup2(fd[1],STDOUT_FILENO); //将标准输出重定向到fd[1]
system("date");
read(fd[0],buf,1024);
dup2(backfd,STDOUT_FILENO); //恢复标准输出
printf("this is a test :\n%s",buf); //上面不恢复,则此处的执行结果无法再屏幕上打印
return 0;
}