【发布时间】:2019-02-18 21:02:09
【问题描述】:
除了使用popen()(正如question 中所讨论的那样)之外,这是一种有效的方法吗?
假设我们有一个名为 hexdump_dup 的程序,并希望该程序输出 hexdump 命令的确切输出。
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd;
fd = open("hexdump_dup", O_CREAT | O_TRUNC | O_WRONLY, 0755); // (line 8)
write(fd, "/usr/bin/hexdump $@;", 20); // (line 9)
close(fd);
return (0);
}
也有人可以简要解释一下第 8 行和第 9 行的作用,以及之后如何执行命令?比如什么时候,在哪里执行命令或者是什么让命令执行?
【问题讨论】:
-
我认为这是一个类似的问题stackoverflow.com/questions/5237482/…
-
在第 8 行,使用的系统调用是
int open(const char *pathname, int flags, mode_t mode);第一个参数是要打开的文件名,第二个参数是一组标志。在您的情况下,您使用了O_CREAT O_TRUNC O_WRONLY。如果文件不存在,首先创建文件。 O_TRUNC - 如果文件已经存在并且是常规文件并且访问模式允许写入(即 O_RDWR 或 O_WRONLY),它将被截断为长度 0。如果文件是 FIFO 或终端设备文件,则忽略 O_TRUNC 标志.否则,未指定 O_TRUNC 的效果。 -
这个位有什么作用
write(fd, "/usr/bin/hexdump $@;", 20);。如果我不得不猜测;这将写入新创建的文件,系统的 hexdump 命令的二进制源代码......如果我错了,请纠正我。$@是做什么的? @Gunasekar -
@Lion 我不确定
$@。数字 20 代表要写入的字节数。 -
行
write(fd, "/usr/bin/hexdump $@;", 20);将"/usr/bin/hexdump $@;"写入文件描述符fd给定的文件,最多20 个字节。您可能已经注意到该字符串也有 20 个字符(不包括终止符NULL)。字符串中的$@指的是传递给脚本的所有参数。有关更多信息,请参阅stackoverflow.com/questions/9994295/…。
标签: c shell command output execute