나는 execve 명령을 통해 파일 설명자를 전달한 다음 다른 쪽에서 액세스 할 수 있는지 궁금합니다. 나는 filedescriptor를 리다이렉트하기 위해 dup2를 사용할 수는 있지만 그것을 할 수는 없다는 것을 알고있다. 실제로 파일 설명자를 자식에게 전달하고 자식에서 사용하는 것이 필요합니다. 에,패스 파일 설명자 - Execve (타입 변환)
close(pfd[1]);
execve("./reader", args_1, NULL);
다음 :
int pfd[2];
if(pipe(pfd) == -1)
exitWithError("PIPE FAILED", 1);
char *args_1[] = {"reader", argv[1], (char*) pfd, (char *) 0};
그런 다음 아이가 원하면 execve 포크 후과 같이 호출
부모는과 같이 파이프 + 인수한다 : 내가 지금까지 가지고
리더 프로그램 통과 된 파이프 설명자에 액세스하려고합니다.
int main(int argc, char* argv[]){
...
write(argv[2][1], buf, read_test);
^^ argv [2]는 파이프 디스크립터를 참조해야하며 [1]은 파이프의 쓰기 끝으로 가야합니다. 나는 여기서 약간 다른 타입 캐스팅을해야한다고 거의 긍정적이지만, 시도하는 모든 것이 잘 풀리지 않습니다.
- 참고 :이 프로그램의 작업 버전은 dup2를 사용하여 표준 입력과 표준 출력으로 리다이렉트하지만, 실제로 프로젝트의 지시에 따라 파이프 설명자를 자식에게 전달해야합니다.
도움을 주시면 감사하겠습니다.
고맙습니다. 나는 여전히 그 거래에서 실제로 일어났던 일에 대해 머리를 감싸려고 노력하고있다. (타입 캐스팅은 조금 혼란 스럽다.) 그러나 당신의 포스트는 분명하고 나는 이해한다고 생각한다. – forTruce