c - 如何在 execl 系统调用中使用 cat 命令创建文本文件?
问题描述
如何使用 c 中的 execl 系统调用使用 cat 命令创建文本文件
我尝试使用
execl("/bin/cat", "cat", ">", "test.txt", NULL);
但它给了我输入输出错误
解决方案
问题是重定向>
是由调用的shell处理的cat
,而不是由cat
它自己处理的。最简单的解决方案是调用sh
,并让它调用cat
并处理重定向:
execl("/bin/sh", "sh", "-c", "/bin/cat > test.txt", (char *) NULL);
另一种方法是自己打开文件(使用open
),关闭标准输出,将文件描述符复制到 fd 1(通过调用dup2
),最后关闭第一个文件描述符。然后你可以打电话execl
,让cat
写入标准输出。这基本上就是 shell 所做的,但让它为你做这件事要容易得多sh
。