이 문제에 필요한 것이 무엇인지 이해하도록 도와줄 수 있는 사람이 있습니까? 그리고 실행 단계는요?
"파이프를 생성하고, 두 프로세스를 포크하고, 파이프를 통해 데이터를 보내는 간단한 프로그램을 작성하세요. (who) 및 (wc)와 같은 두 가지 표준 프로그램을 사용하세요."
답변1
리눅스 파이프가 무엇인지 아시나요? 그렇지 않다면 그것에 대해 읽어보십시오.여기. 따라서 매우 기본적인 작업은 두 개의 프로세스를 생성하고 한 작업의 출력을 다른 작업의 입력에 연결하는 것입니다. 여기에 문제가 있습니다.
이 질문은 어떤 작업을 사용해야 하는지 지정합니다.
who
: 현재 로그인된 모든 사용자를 한 줄에 하나씩 나열합니다.wc
: 내용을 계산하는 작은 도구 - 단어 수, 줄 수, 바이트...
이 두 도구를 사용하면 현재 로그인한 사용자 수를 쉽게 계산할 수 있습니다.
일반적인 Linux 도구의 한 가지 이점은 대부분이 stdin과 함께 작동한다는 것입니다. Linux 파이프는 |
왼쪽 프로세스의 stdout을 오른쪽 프로세스의 stdin에 연결하기 때문에 파이프를 사용하는 데 도움이 됩니다!
이는 질문의 의미를 이해하는 데 도움이 될 것입니다 ...
답변2
파이프라인(int 파이프라인fd[2]) syscall에 대한 읽기(man) - 두 개의 파일 설명자를 반환합니다. 하나는 읽기용이고 다른 하나는 쓰기용입니다. 다음으로 두 프로세스를 모두 포크합니다. 여전히 동일한(포크된 프로세스에 있으므로) 파이프라인fd[] 배열이 반환된 것을 볼 수 있습니다.
다음으로, 쉘에서 파이프를 시뮬레이션하려면 다음을 수행해야 합니다.
첫 번째 프로세스에서:
- 파일 설명자 1 닫기(표준 출력)
- dup()은 파이프라인()에서 받은 파일 설명자를 읽습니다. 이제 fd=1(stdout)이기도 합니다.
- 누구를 처형할 것인가
두 번째 프로세스에서는 다음을 수행합니다.
- 파일 설명자 0(stdin) 닫기
- dup()은 파이프라인()에서 받은 파일 설명자에 씁니다. 이제 fd=0(stdin)이기도 합니다.
- 고급 화장실