После этого
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);
Аргумент flags должен включать один из следующих прав доступа
режимы: O_RDONLY, O_WRONLY или O_RDWR . Эти запросы открываются
файл только для чтения, только для записи или для чтения / записи, соответственно.
O_CREAT
Если файл не существует, он будет создан .
Владелец (идентификатор пользователя) файла установлен на действующий
идентификатор пользователя процесса.
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
это займет все параметры, которые будут переданы.