//////////////////////////////////////// 글쓴이: lanewz 글쓴날: 2000-12-13 20:02:44
: stdin 과 "r" 모드로 연 파일 스트림간에 차이가 있나요?
: 제가 혼자 쓸 작은 프로그램을 만들면서 만든 함수 중에
: (FILE * )형 인수로 받는 함수 있는데 여기에 stdin 을 넘겨주면
: 에러가 나고 fopen 의 "r" 모드로 연 파일 스트림을 넘겨주면
: 잘 동작합니다.
: 디버깅 해보면 에러 나는 곳도 실행 할때마다 달라집니다.
: 대부분 fseek(), fgets() 등에서 에러가 납니다.
: 뭔가 문제인지, 혹은 stdin 과 "r" 모드로 연 스트림과의 차이점을
: 아시는 분의 답변 바랍니다.
:
: stdin 이 바이너리 모드라서 그런가요?
: 리눅스는 텍스트/바이너리 스트림 구분이 없다고 들었는데....
:
: 참고로 스트림을 "rb" 모드로 열었을 때도 마찬가지 였습니다.
:
: --
: lanewz
///////////////////////////// [RE] 글쓴이: 조성석 글쓴날: 2000-12-14 15:22:04
리눅스에서 그런가요?
해보니까 난 잘되는데 ...
#include
int main()
{
char line[1024];
FILE *fp;
fp = fopen("aa.c","r");
// fp = stdin;
while (fgets(line,1023,fp))
{
line[1023] = 0;
if ( line[strlen(line)-1] == '' )
line[strlen(line)-1] = 0;
printf("line=%s", line);
//fseek(fp,0,0);
}
fclose(fp);
}
///////////////////////////// [RE][RE]
제 질문은 ...........
/**************************/
#include <stdio.h>
int main() {
char buf[256];
FILE *fs;
int n = 0;
fs = stdin; /* 1 */
//fs = fopen("a","r"); /* 2 */
while( fgets(buf,256,fs)) {
long off;
printf("%s",buf);
if( ++count == 5 ) {
off = ftell(fs);
printf("before offset = %d",off);
fseek(fs,-1*strlen(buf),SEEK_CUR); /* 3 */
off = ftell(fs);
printf("after offset = %d (%m)",off);
break;
}
}
}
/***********************/
이거 실행 시키면 /* 2 */ 넣고 실행하면 제대로 되지만
/* 1 */ (stdin) 넣고 실행하면 /* 3 */ 에서 에러가 나죠.
제가 알고 싶은 건 바로 이겁니다.
stdin 과 "r" 모드로 연 파일 스트림의 차이가 뭔가요?--lanewz