gpt4 book ai didi

C:在C中执行和输出shell命令

转载 作者:行者123 更新时间:2023-11-30 19:29:49 25 4
gpt4 key购买 nike

除了使用 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 行的作用,以及之后命令如何执行吗?比如什么时候、在哪里执行命令或者什么使命令执行?

最佳答案

在此之后

fd = open("hexdump_dup", O_CREAT | O_TRUNC | O_WRONLY, 0755);    // (line 8)
write(fd, "/usr/bin/hexdump $@;", 20);

您需要执行hexdump_dup可执行文件,因为您需要使用system()exec()系列函数。例如

system("./hexdump_dup 1 2 3"); /* after creating binary file(hexdump_dup) & writing command into it, you need to run it, for that use system() or exec() */

这个

fd = open("hexdump_dup", O_CREAT | O_TRUNC | O_WRONLY, 0755);

如果之前不存在hexdump_dup二进制文件,则将创建它;如果之前存在,则将其内容截断为0。您可以引用 open() 的手册页,它说

 int open(const char *pathname, int flags, mode_t mode);

The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR. These request opening the file read-only, write-only, or read/write, respectively.

O_CREAT If the file does not exist it will be created. The owner (user ID) of the file is set to the effective user ID of the process.

O_TRUNC If the file already exists and is a regular file and the open mode allows writing (i.e., is O_RDWR or O_WRONLY) it will be truncated to length 0. If the file is a FIFO or terminal device file, the O_TRUNC flag is ignored.

最后这个

write(fd, "/usr/bin/hexdump $@;", 20); 

将包含字符数组 /usr/bin/hexdump $@;20 字节写入到 fd 指向的文件中,即它会将其放入 hexdump_dup 文件中。

这里$@表示当你执行hexdump_dup

./hexdump_dup 1 2 3

它将传递所有参数。

关于C:在C中执行和输出shell命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52325357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com