Я пытаюсь передать вывод вызова excv через канал, прочитать его, а затем выполнить еще один вызов execv.Пример: ls -l |Больше.Я не уверен, как читать данные, поступающие через канал.Я попытался найти хороший ответ о том, как сделать это с другими ресурсами, но все используют очень простые примеры со строкой фиксированного размера.Нужно ли делать чтение данных динамически, допуская более или менее, или это может быть буфер фиксированного размера?
else {
int pipefd[2];
pipe(pipefd);
int rc = fork();
if(rc == -1) {
error();
}
if (rc == 0) {
// close reading end in the child
close(pipefd[0]);
// send stdout to the pipe
if(dup2(pipefd[1], 1) == -1) {
error();
}
// send stderr to the pipe
if(dup2(pipefd[1], 2) == -1) {
error();
}
// this descriptor is no longer needed
close(pipefd[1]);
// example
// path: /bin/ls
// commands: ls -l
if (access(path, X_OK) == 0) {
execv(path, commands);
error();
}
free(path);
exit(1);
}
} else {
// parent process
wait(NULL);
// close the write end of the pipe in the parent
close(pipefd[1]);
// do I read here?
}
Ожидаемые результаты - их чтение из канала и последующий вызов execv для этогоданные.