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

相关推荐
_wyt0012 分钟前
洛谷P15799 [GESP202603 五级] 找数 题解
c++·gesp
天天进步20152 分钟前
Python全栈项目--智能远程医疗系统
开发语言·python
AI人工智能+电脑小能手6 分钟前
【大白话说Java面试题 第97题】【Mysql篇】第27题:说说分库与分表的设计?
java·开发语言·数据库·分布式·mysql·算法
Vertira9 分钟前
VS2022 配置Qt5/6 [已解决]
开发语言·qt
困意少年9 分钟前
C++11 如何减少无意义的拷贝:右值引用、`std::move`、移动语义与完美转发
c++
RSTJ_162514 分钟前
PYTHON+AI LLM DAY SIXTY-SEVEN
开发语言·python
FuckPatience15 分钟前
C# 继承中的使用new的陷阱,和abstract /virtual 的不同
开发语言·c#
hssfscv17 分钟前
QT的学习记录2
开发语言·qt·学习
ch.ju24 分钟前
Java Programming Chapter 4——The set-get method.
java·开发语言
dog25024 分钟前
科斯定理与平坦随机网络的自然秩序
开发语言·网络·php