2014-11-06 4 views
0

scanf 호출 뒤에 read 호출이 오는 C 프로그램이 있습니다. printf을 사용하여 두 입력을주고 싶습니다.stdin을 두 번 리디렉션 하시겠습니까?

printf 10 | program_name은 어떤 이유로 작동하지 않습니다. scanf은 올바르게 10을 선택하지만 read 호출의 기본값은 ""이며 입력을 요구하지 않습니다.

printf을 두 번 사용하려면 한 번 입력을 scanf으로 전달하고 두 번째로 입력을 read으로 전달하고 싶습니다. 어떻게해야합니까?

+1

scanf는 버퍼의 많은 입력을 소비합니다. 일반적으로 printf와 write, 또는 scanf와 read를 섞어 쓰는 것은 나쁜 생각이다. –

+0

불행히도 프로그램을 작성하지 않았습니다. – LonelyWebCrawler

답변

2

끔찍한 해킹으로, scanf의 버퍼가 가득 찼는 지 확인해야합니다. 같은 뭔가 :

{ printf 10; dd if=/dev/zero bs=4094 count=1; 
    echo This text will go to the read if bufsize is 4096; } | program_name 

여기에 기술 얻기 위해 읽기 파이프에 데이터를 떠나, 첫 번째 읽기에 버퍼를 채우기 위해 처음 4096 바이트를 읽어들이는 scanf에 의존한다. 가장 큰 문제점은 매우 약해서 사용 된 버퍼링에 대한 자세한 지식이 필요하다는 것입니다. 전반적으로 이것은 끔찍한 생각이지만 동일한 파일 설명자에서 scanf를 호출 한 후 호출하는 것이 그리 좋지 않습니다.

+0

프로그램이'#define BUFSIZE 256'이라고하지만 명령이'scanf ("% d", & length)'라고하면 256이나 4를 사용해야합니까? – LonelyWebCrawler

+0

기본 버퍼 크기를 사용해야합니다.이 버퍼 크기는 프로그램에 정의 된 매크로와 관련이 없습니다. 시스템에 따라 다르며 아마도 4096 또는 8192입니다. –

+0

감사합니다. – LonelyWebCrawler