簡體   English   中英

C:在C中執行和輸出shell命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM