Это инструкции для кода: Программа с именем mp2_part6.cpp, которая запускает команду «ls -la», используя fork(), за которой следует exec() (любая из функций exec будет работать). Используйте системный вызов UNIX для отправки вывода ls -la обратно родительскому, прочитайте его с помощью функции read(), а затем запишите его в консоль с помощью функции write(). Примечание: труба не работает, если вы не закрываете и/или не перенаправляете правильные дескрипторы файлов. Вам решать, какие из них должны быть.Система труб UNIX с чтением и записью для выполнения команды «ls -la»
Это то, что у меня есть до сих пор. Я не уверен, почему он не печатает правильный результат.
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <iostream>
char *cmd1[] = { "/bin/ls -la", 0 };
int main()
{
int fd[2], nbytes;
char string[] = "ls -la";
char readbuffer[80];
pipe(fd);
pid_t pid = fork();
if(pid == 0) { // child writes to pipe
// open the pipe, call exec here, write output from exec into pipe
close(fd[0]); // read not needed
dup(fd[1]);
close(fd[1]);
write(fd[1], cmd1[0], strlen(cmd1[0])+1);
exit(0);
}
else { // parent reads from pipe
// read output from pipe, write to console
close(fd[1]); // write not needed
nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
std::cout << readbuffer << std::endl;
execl(readbuffer, (char*)NULL);
close(fd[0]);
write(1, readbuffer, nbytes);
}
exit(0);
}
Вы истолковано, что правильно. Спасибо за помощь! –
Проголосовать было бы здорово. И спасибо за маркировку как ответ. –