bin/sh를 쉘로 사용하여 Linux 상자에 액세스하고 있습니다. 나는 작은 프로그램을 코딩, 아래의 추출 :(C/Linux) netcat을 통해 bin/sh 쉘을 사용할 때 문제가 발생합니다. 프로그램이 끝날 때까지 화면에 printfs가 나타나지 않습니다.
printf("Enter command to exec \n");
fgets(abc,128,stdin);
....
어떤 일이 일어나고 것은 내가 netcat을 통해 쉘 내에서 프로그램을 실행할 때 "시스템에 전송하는 명령을 입력"실제로가 완료 될 때까지 인쇄되지 않는다는 것입니다 프로그램을 종료했습니다.
./program 다음에 화면에 나타나는 것이 가장 먼저 나와야하며 이상하게도 printf 명령을 생략하는 것처럼 실행시 입력이 필요합니다. 필자의 입력은 시스템에 잘 보내지 만 (출력물을 출력합니다), 그렇지 않으면 화면에 아무 것도 표시되지 않고 공백으로 표시되고 코드가 나타납니다.
그러나 일단 프로그램을 종료하면 쉘에 돌아 오기 전에 모든 printfs가 실제로 (버퍼링 된 것처럼) 나타납니다. 왜 이런 일이 일어나는가? 필요한 정보가 더 있으면 알려 주시면 기꺼이 스레드를 업데이트 할 것입니다.
당신이해야 할, 일반적으로 라인 버퍼링 터미널stdout
에 당신에게
안녕, 이것은 실제 코드, 죄송 \엔"); 나는 그 스레드를 지금 업데이트했습니다. 미안합니다. – user1166981
@ user1166981 대답을 – ouah
예 업데이트했습니다. stdout flushing이 작동했습니다! 시간이 다 된 후에 나는 답을 표시 할 것입니다. 고마워요. – user1166981