获取SYSTEM()执行结果

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;
}

 

 

 

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值