문제

프로그래밍 할당의 경우 다음과 같은 요구 사항이 있습니다.

  1. C로 작성된 명령 줄 프로그램이어야합니다.
  2. 텍스트 문서에서 텍스트를 읽어야합니다. 그러나 프로그램이 파일 자체를로드하지 않고 프로그램을 실행할 때 Unix 리디렉션 연산자를 사용하여이를 수행해야합니다. (따라서 프로그램은 Stdin에서 읽는 척하여 텍스트를 읽습니다.)
  3. 파일에서 데이터를 읽은 후 프로그램은 작업을 수행하기 전에 추가 정보를 사용자에게 투표하는 것입니다.

많은 연구 후에, 나는 부분을 달성하기 위해 "오래된"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. 이것이 당신의 과제의 요구 사항을 충족하는지는 모르겠지만 실험 할 가치가있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top