2009-06-30 3 views
2

스크립트를 실행하고 내 프로그램에서 기본 표준 입력 (터미널 입력)에 액세스해야합니다. 프로그램을 통해 스크립트를 열고 구문 분석하는 ./program "script"를 할 수는 있지만 파이프 또는 리디렉션에서 입력을 허용하여 POSIX 스타일로 만들고 싶습니다.파일 리디렉션을 사용하는 동안 기본 표준 입력에 액세스하는 방법은 무엇입니까?

내 프로그램이 파서이므로 ./program을 실행하고 스크립트를 입력 한 다음 stdin (예 : scanf)을 계속 사용할 수 있습니다. 하지만 ./program < 스크립트를 실행하고 stdin (scanf에서)을 계속 사용할 수 있습니다.

내 프로그램은 간체 인 파스칼 인터프리터이므로 내 스크립트에 read(x)write(x)을 실행해야합니다.

예, 숙제 (intepreter)이지만 브레인 스토밍 과정에서 의심의 여지가 나타났습니다.

답변

1

ttyname (0)은 stdin과 연결된 현재 터미널의 파일 이름을 반환합니다. 그런 다음 열어서 읽을 수 있습니다.

+1

음, 매일 새로운 것을 배울 것 같네요. :) 아직도, 자주하고 싶은 것처럼 보이지는 않습니다. :) –

+0

일반적인 것은 아니지만 작년에 '더 많은'프로그램을 구현해야했습니다. 파일로부터 입력을 읽어서 stdout으로 출력하지만 스크롤을 계속하려면 키보드에서 입력을 읽어야합니다. :) –

+0

당신은 더 많은 수락 된 파이프 된/리디렉션 된 입력을 했습니까? Btw, ttyname (0)은 나에게 stdin을 얻을 것이다. 그러나 그것이 리다이렉션 되었기 때문에 나는 터미널을 얻지 못할 것이다. 아마도 반환 된 문자열을 사용하여 표준 입력란을 찾을 수 있습니다. – Spidey

0

위와 같은 ./program < 스크립트 비트와 같이 파일 리디렉션을 사용할 때 대화 형 입력을 사용자가 받아들이는 기능이 있는지 묻는 중입니다.

나는 그렇게 할 수있는 방법이 있다고 생각하지 않습니다. POSIX 시스템은 stdin을 통해 스크립트를 제공합니다. 사용자와의 상호 작용이 없습니다.

실현하기 위해 특별한 조치를 취할 필요가 없습니다. 평상시와 같이 표준 입력을 처리하십시오. 대화식으로 또는 파일에서 오는 것인지 여부는 생각할 필요가 없습니다.

+0

마지막 비트, 내가 이미 알고 있던 파일 리다이렉션에 대해, mark4o가 설명한 것처럼 현재 터미널이 바인딩 된 파일을 알고 싶습니다. – Spidey

2

stdin이 리디렉션 된 경우에도 현재 제어 터미널에 /dev/tty을 사용하여 액세스 할 수 있습니다.

+0

아마도 제어 터미널이없는 경우에/dev/tty 열기가 실패 할 것이라는 것을 추가하는 것이 좋습니다. 일반적인 두 가지 경우는 다음과 같습니다. cron 또는 at을 통해 프로세스가 시작되었습니다. 일반적으로 deamons에서 시작된 프로세스는 데몬이며 제어 터미널이 없습니다. – Ingo

관련 문제