linux下的execl()调用

记录linux下调用execl()时碰到的一个问题。

在程序里要执行iwlist命令,以获取所以连接在自身热点上的连接列表。

参考网址:

linux执行命令并获取结果(system): https://www.cnblogs.com/bwbfight/p/10682722.html

在这个文章里,创建了一个临时文件用于system()命令的输出,在调用system()之前,先创建该临时文件,核心代码:

    tmp_fd = mkstemp(tmpfile);
    if(tmp_fd < 0)
    {
        printf("mkstemp failed\n");
        return -1;
    }
    close(tmp_fd);
 
    sprintf(cmd_string, "%s > %s 2>&1", cmdstring, tmpfile);/*标准输出(1),标准错误(2)都输出到临时文件*/
    if(system_ex(cmd_string, 20) < 0)
    {
        printf("run \"%s\" ret < 0!\n", cmd_string);
    }
 
    fd = open(tmpfile, O_RDONLY);
    if(fd < 0)
    {
        printf("open %s failed!\n", tmpfile);
        nbytes = -1;
    }
    else
    {
        nbytes = read(fd, buff, size - 1);
        close(fd);
    }

其中 system_ex()函数中的核心就是调用

execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);

本文要说的是,对sysem_ex()调用前后的临时文件问题。按照这个代码(我把临时文件改成了我自己的目录和普通的文件名,并且采用fopen()来创建),我发现,命令的输出是写不到文件里的,在执行命令的时候,会有无权限的打印。通过查看,文件是创建成功的,但文件内容是空的。

然后,我把调用system_ex()之前的创建文件给注释掉,再运行时,文件就正常了,内容也写在里面了。

通过这个试验说明,在自动输出到文件之前的文件创建,实际上多余的一个步骤,完全没有必要,也不需要。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值