2012-11-22 4 views
0

termcaps에 대한 연습으로 항목 목록을 표시하고 사용자가 그 중 일부를 선택하도록하는 프로그램을 작성해야합니다. 프로그램은 선택한 항목을 공백으로 구분하여 출력합니다. 이 프로그램은 다음과 같이 호출 할 수 있습니다backticks 사이에 호출 된 프로그램의 출력 표시

$> ls `my_program foo1 foo2 foo3` 

내 프로그램은 첫 번째 경우에서 잘 작동하지만 두 번째 경우에, my_program은의 표준 출력은 역 따옴표에 의해 차단된다

$> ./my_program foo1 foo2 foo3 

또는 같은

터미널에 표시되지 않습니다. 나는 맹목적으로 일부 항목을 선택하면 내가 예상 한 결과를 얻은 이후 프로그램이 잘 실행되고 있음을 알고 있습니다. • IOCTL • tcsetattr이 • tcgetattr과 • tgetent • tgoto • tputs • tgetstr • tparm • 개방 : 내 프로그램에서

, 나는 어떤 내장 함수를 사용할 수 없습니다 다음을 제외 • 가까운 • • 무료 • malloc에 ​​ • 쓰기 읽기 • 종료 • 신호

두 번째 경우처럼 호출 될 때 my_program의 stdout을 사용자에게 어떻게 표시 할 수 있습니까?

편집 : 내가 찾은 유일한 옵션은

+1

터미널 디스플레이를 사용하는 프로그램은 역 따옴표 (또는 더 나은,'$ (...)'표기법)에서 사용하도록 설계되지 않았습니다. 최소한 표준 출력이 터미널인지 아닌지에 따라 동작이 달라질 수 있습니다. 운동은 터미널 디스플레이를 사용하기 때문에 창의력을 발휘해야 할 수도 있습니다. 아마도 당신은 사용자와의 I/O 작업을 위해'/ dev/tty'를 사용하고, 비 대화식 항목에 대해서는 stdout을 그대로 사용해야합니다. 그러나 필수적인 디자인은 ... 최적 이하, 비표준, 불쾌한 것입니다. 프로그램을 사용할 필요가 없음을 상기시켜주십시오. (아, 두 번째 생각에, 당신은 나를 상기시킬 필요가 없을 것입니다 ...) –

+0

/dev/tty에 글쓰기가 훌륭합니다! 감사 ! 그냥 학습 목적으로,이 코드는이 범위 밖에서 사용되지 않습니다;) –

답변

3

당신은 열고 my_program/dev/tty에 기록하고 터미널 만에되지 않습니다 수 있습니다 ... 표준 에러 선택한 항목을 stdout에 출력 출력 모두에있다 리디렉션 된 stdout.

+0

대단히 감사합니다;) –