[英]C: Executing and outputing shell commands in C
除了使用popen()
(正如在這個問題中所討論的)之外,這是一種有效的方法嗎?
假設我們有一個名為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);
參數標志必須包括以下訪問模式之一: O_RDONLY、O_WRONLY 或 O_RDWR 。 這些請求分別以只讀、只寫或讀/寫方式打開文件。
O_CREAT如果文件不存在,它將被創建。 文件的所有者(用戶 ID)設置為進程的有效用戶 ID。
O_TRUNC如果文件已經存在並且是一個普通文件並且打開模式允許寫入(即,是 O_RDWR 或 O_WRONLY),它將被截斷為長度 0。如果文件是 FIFO 或終端設備文件,則忽略O_TRUNC標志。
最后這個
write(fd, "/usr/bin/hexdump $@;", 20);
寫入包含字符數組的20
個字節/usr/bin/hexdump $@;
在這種情況下,放入fd
指向的文件中,即它會將其放入hexdump_dup
文件中。
這里$@
表示當你執行hexdump_dup
./hexdump_dup 1 2 3
它將需要傳遞所有參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.