首页 > 解决方案 > 如何在 execl 系统调用中使用 cat 命令创建文本文件?

问题描述

如何使用 c 中的 execl 系统调用使用 cat 命令创建文本文件

我尝试使用

execl("/bin/cat", "cat", ">", "test.txt", NULL);

但它给了我输入输出错误

标签: clinuxshellubuntusystem-calls

解决方案


问题是重定向>是由调用的shell处理的cat,而不是由cat它自己处理的。最简单的解决方案是调用sh,并让它调用cat并处理重定向:

execl("/bin/sh", "sh", "-c", "/bin/cat > test.txt", (char *) NULL);

另一种方法是自己打开文件(使用open),关闭标准输出,将文件描述符复制到 fd 1(通过调用dup2),最后关闭第一个文件描述符。然后你可以打电话execl,让cat写入标准输出。这基本上就是 shell 所做的,但让它为你做这件事要容易得多sh


推荐阅读