c++ execl 执行 重定向

复制代码
#include <unistd.h>
 
int main() {
    pid_t childPid = fork(); // 创建子进程
    
    if (childPid == 0) {
        // 子进程
        
        // 关闭标准输入、输出和错误流
        close(STDIN_FILENO);
        close(STDOUT_FILENO);
        close(STDERR_FILENO);
        
        // 打开要写入的文件
        int fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
        
        // 设置新的标准输出为指定文件
        dup2(fd, STDOUT_FILENO);
        
        // 执行需要重定向的命令
        execlp("/bin/ls", "ls", "-la", NULL);
        
        // 若上面的execlp调用失败,则会返回-1,可以根据需求处理该情况
    } else if (childPid > 0) {
        // 父进程等待子进程完成
        waitpid(childPid, nullptr, 0);
    } else {
        // fork失败时的处理
        perror("fork");
        return 1;
    }
    
    return 0;
}

这段代码首先创建了一个子进程,然后在子进程中关闭了标准输入、输出和错误流,接着打开了名为output.txt的文件,并将其作为新的标准输出(stdout)。最后,通过execlp函数执行了"/bin/ls -la"命令,并将结果重定向到output.txt文件中。

相关推荐
心仪久了会沦陷6 分钟前
C语言数据结构入门——队列补充:循环队列的数组实现
c语言·开发语言·数据结构·笔记
源图客19 分钟前
Python环境安装与PyCharm的第一个项目
开发语言·python·pycharm
longlongzihan20 分钟前
从LeetCode 19. 删除链表的倒数第 N 个结点深入理解“哨兵节点”
c++·算法·leetcode·链表
zx_7414848128 分钟前
PyQt5 环境搭建保姆级教程:PyCharm + QtDesigner + PyUIC 完整配置
开发语言·qt·pycharm·pyqt
爱吃提升1 小时前
Dev-C++ 5.11 完整版快捷键大全(信奥/初学适用)
c语言·c++
Soari1 小时前
交换机转发模式
开发语言·网络·php
deviant-ART1 小时前
Java 并发编程:深入理解 synchronized 的使用与原理
java·开发语言·后端
kimnoic1 小时前
Python中使用封装类还是函数以及它们的区别
开发语言·python
代码什么用1 小时前
Java Web 21-22
java·开发语言·web
青柠之夏cc1 小时前
Python Java PHP底层对比:内存并发性能全解析
开发语言·python·线程