2012-03-18 2 views
-1

파일 대신 터미널 화면으로 인쇄하도록 변경하려고합니다. 그래서 표준 출력으로 인쇄하려고합니다.이 코드를 변경하여 stdout에 대신 쓰는 방법은 무엇입니까?

char buf;  
int s, n;  
char filename[LINELEN]; 
char *recfile = "recfile.txt"; 
FILE *finp; 

fflush(NULL); 
while(buf != EOF) 
{ 
    fflush(finp); 
    if (read(s, &buf, 1) < 0) { 
     printf("\terror in recieving file\n"); 
    } 
    if(buf != EOF) 
    (void) fputc(buf, finp); 
} 
fclose(finp); 
close(s); 

나는이 변경을 시도했다.

finp = freopen("/dev/null","w+", stdout); 

Linux의 모든 항목이 파일입니까? 왜 그렇게 일하지 않았습니까?

+1

나는 모든 코드를 보여주고 있다고 생각하지 않습니다. 그러나'fputc()'대신에'putc()'를 호출하지 않는 것이 좋을까요? 출력을'stout'으로하고 싶다면,'/ dev/null'으로 리다이렉트하는 것처럼 보입니다. 아주 좋은 생각은 아닙니다 ... –

+0

* 터미널 스크린에 프린트하려고합니다. * 왜 'freopen ("/ dev/null", "w +", stdout)'이 터미널에'stdout'을 재 연관시킬 것이라고 생각합니까? –

+0

이 프로그램 조각은 여러 가지 이유로 거의 확실하게 작동하지 않습니다. 우리는 _all_ 소스 코드를보아야하며, 읽으려는 입력 파일의 예가 바람직합니다. – gbulmer

답변

2

fputc(buf, stdout);이 아니어야합니까?

1

/dev/null을 열고 표준 출력을 리디렉션하지만 /dev/null에 문자를 쓰면 무시됩니다. 이 경우 freopen()은 stdout/dev/null 파일로 리디렉션합니다.

0

해당 프로그램에는 몇 가지 다른 문제가 있습니다.

사용하여 파일 읽기 :

if (read(s, &buf, 1) < 0) ... 

때문에, 버피에 EOF를 값을 넣어하지 않습니다

if(buf != EOF) 

while(buf != EOF) 
이 끝에 도달했을 때

종료되지 않습니다 파일의.

buf이 문자 값 0xFF을 넣으면 그 값은 부호 확장되며 EOF으로 착각합니다. 이 파일 디스크립터 읽어야 할 때 예측할 수 있도록 0

s 반환하여 파일

read 신호 일단 적절히 initialsed 아니다.

+0

@Dave - 내 답변의 텍스트를 수정 한 이유는 무엇이며, 모든 문자를 정확하게 똑같은 문자로 바꾼 것 같습니다. 즉, HTH를 제외하고는 내가 볼 수있는 내용이 변경되지 않았습니까? – gbulmer

+0

주로 내가 실수로 downvoted 때문에,하지만 잠겨서, 나는 undownvote을 편집했다. 그 외에, HTH는 보통 stackoverflow 형식이 아니며 4 개의 공간 코드 블록을 사용하면 구문 강조를 사용할 수 있습니다. – Dave

+0

@Dave - de-downvoting 해줘서 고마워! -) 또한 HTH 팁을 주셔서 감사합니다. 사용하고 사용하는 것을 본 적이 있으므로 잘 모릅니다. "4 스페이스 블록"이 무엇인지보기 위해 살펴볼 것입니다. 강조 표시를하기 위해 {} 명령을 사용했습니다. – gbulmer

관련 문제