2012-02-03 2 views
1

bin/sh를 쉘로 사용하여 Linux 상자에 액세스하고 있습니다. 나는 작은 프로그램을 코딩, 아래의 추출 :(C/Linux) netcat을 통해 bin/sh 쉘을 사용할 때 문제가 발생합니다. 프로그램이 끝날 때까지 화면에 printfs가 나타나지 않습니다.

printf("Enter command to exec \n"); 

fgets(abc,128,stdin); 

.... 

어떤 일이 일어나고 것은 내가 netcat을 통해 쉘 내에서 프로그램을 실행할 때 "시스템에 전송하는 명령을 입력"실제로가 완료 될 때까지 인쇄되지 않는다는 것입니다 프로그램을 종료했습니다.

./program 다음에 화면에 나타나는 것이 가장 먼저 나와야하며 이상하게도 printf 명령을 생략하는 것처럼 실행시 입력이 필요합니다. 필자의 입력은 시스템에 잘 보내지 만 (출력물을 출력합니다), 그렇지 않으면 화면에 아무 것도 표시되지 않고 공백으로 표시되고 코드가 나타납니다.

그러나 일단 프로그램을 종료하면 쉘에 돌아 오기 전에 모든 printfs가 실제로 (버퍼링 된 것처럼) 나타납니다. 왜 이런 일이 일어나는가? 필요한 정보가 더 있으면 알려 주시면 기꺼이 스레드를 업데이트 할 것입니다.

당신이해야 할, 일반적으로 라인 버퍼링 터미널 stdout에 당신에게

답변

2

대단히 감사 중 fflush(stdout) 또는 인쇄 새로운 라인 '\n' 인쇄 캐릭터를 보려면.

비 대화식 장치에

는, 스트림은 종종 전체 버퍼이고, 당신이 당신의 문자를 인쇄하도록 stdout를 세척해야 "(printf와 간부 인 명령을 입력

printf("Enter command to send to system \n"); 
fflush(stdout); 
+0

안녕, 이것은 실제 코드, 죄송 \엔"); 나는 그 스레드를 지금 업데이트했습니다. 미안합니다. – user1166981

+0

@ user1166981 대답을 – ouah

+0

예 업데이트했습니다. stdout flushing이 작동했습니다! 시간이 다 된 후에 나는 답을 표시 할 것입니다. 고마워요. – user1166981