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文件中。

相关推荐
Rust研习社22 分钟前
从入门到实践:Rust 异步编程完全指南
开发语言·后端·rust
yaoxin52112326 分钟前
389. Java IO API - 获取文件名
java·开发语言·python
小苗卷不动1 小时前
OJ练习之疯狂的自我检索者(简单)
c++
LUVK_1 小时前
第七章查找
数据结构·c++·考研·算法·408
迷途之人不知返1 小时前
vector
c++
lhbian1 小时前
AI编程革命:Codex让脚本开发提速10倍
开发语言·汇编·jvm·c#
jiayong231 小时前
第 36 课:任务详情抽屉快捷改状态
开发语言·前端·javascript·vue.js·学习
khalil10201 小时前
代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树
数据结构·c++·算法·leetcode·贪心算法·二叉树·递归
FFF_634560231 小时前
通用 vue 页面 js 下载任何文件的方法
开发语言·前端·javascript
小苗卷不动1 小时前
进程与线程的核心区别
c++