문제
프로그래밍 할당의 경우 다음과 같은 요구 사항이 있습니다.
- C로 작성된 명령 줄 프로그램이어야합니다.
- 텍스트 문서에서 텍스트를 읽어야합니다. 그러나 프로그램이 파일 자체를로드하지 않고 프로그램을 실행할 때 Unix 리디렉션 연산자를 사용하여이를 수행해야합니다. (따라서 프로그램은 Stdin에서 읽는 척하여 텍스트를 읽습니다.)
- 파일에서 데이터를 읽은 후 프로그램은 작업을 수행하기 전에 추가 정보를 사용자에게 투표하는 것입니다.
많은 연구 후에, 나는 부분을 달성하기 위해 "오래된"stdin을 검색하는 방법을 찾을 수 없습니다 (3). 이것이 가능한 방법이나 여부를 아는 사람이 있습니까?
기술적으로 (3)은 보너스 섹션의 일부로 강사가 자신을 구현하지 않았을 것입니다 (매우 길다). 따라서 이것이 불가능하고 그의 입장에 대한 감독 일 가능성이 있습니다. 그러나 나는 확실히이 결론에 뛰어 들고 싶지 않다.
해결책
Linux에서는 제어 터미널 /dev /tty를 열었습니다.
다른 팁
어떤 OS? Linux에서이를 달성하기위한 일반적인 트릭은 Stderr가 여전히 tty에 연결되어 있는지 확인하는 것입니다.
if (isatty(2))
그렇다면 해당 터미널에 새 독서 파일 디스크립터를 엽니 다.
new_stdin = open("/proc/self/fd/2", O_RDONLY);
그런 다음 새 파일 디스크립터를 stdin (이전 stdin을 닫는)으로 복제합니다.
dup2(new_stdin, 0);
(Stderr도 리디렉션 된 경우 isatty(2)
거짓을 반환하면 포기해야합니다.)
다음과 같은 프로그램을 실행하는 경우 :
myprog 3<&0 < filename
그런 다음 파일 디스크립터 3을 설정합니다. 복제로 stdin
. 이것이 당신의 과제의 요구 사항을 충족하는지는 모르겠지만 실험 할 가치가있을 수 있습니다.
제휴하지 않습니다 StackOverflow