2013-12-14 7 views
0

어제 우리 수업에서 우리는 처음으로 파일 작업을 시작했습니다. 어떻게 작동하는지보고 싶었 기 때문에 한 단어를 쓰고 그 단어를 특정 파일 (그 부분이 작동하는)에 작성해야하는 프로그램을 만들었습니다. 그 후, 나는 그 파일에서 많은 문자를 읽고 그것을 화면에 보여주고 싶었다.파일에서 읽기

#include <stdio.h> 
#include <stdlib.h> 
#include <io.h> 
#include <sys/stat.h> 
#include <process.h> 
#include <fcntl.h> 
#include <string.h> 

int main() 
{ 
    int df,m; 
    char c[50],d[50]; 
    printf("c= \n"); 
    gets(c); 
    m=strlen(c); 
    df=open("e:\\codeblocks\\fisperimente\\text2.txt",O_RDONLY|O_WRONLY); 
    if (df==-1) {printf("error");exit(1);} 
    write(df,c,m); 
    /*int i,n; 
    n=read(df,d,5); 
    for (i=1;i<=n;i++) 
    { 
     printf("%c",d[i]); 
    } */ 

    close(df); 
    return 0; 
} 

제가 주석에 넣은 것은 작동하지 않는 부분입니다. printf n이 -1이면 파일에서 읽는 동안 내가 잘못했음을 알았습니다.

답변

2

파일의 내용을 다시 읽으려면 파일의 시작 부분을 찾아야합니다. 아니면 독서를 위해 다시 열거 나 다시 열 수 있습니다. 모드 O_RDWR 보통 O_RDONLY | O_WRONLY 같지 않은 것을

1

에 한번 사용 플래그 O_RDWR, 읽기 전용 및 쓰기 전용 플래그의 논리합 결과는 당신이하지 생각하지 않습니다. 따라서 O_WRONLY (일반적으로 O_RDONLY0) 파일을 열었을 것입니다. 이것은 아직 당신의 주요 문제가 아닙니다. 그것은 하나가 될 것입니다.

1

주)

+0

내가 O_RDONLY 사용 | 우리 교수는 우리가 읽고 파일에서 쓸 수있는 우리에게 어떻게이 O_WRONLY 때문에이는 것을 할 것입니다.. Michael의 충고를 사용하여 다시 열었고 효과가있었습니다 (두 번째 열 때 RD_ONLY 만 사용했습니다). 그런 다음 첫 번째 열에서 내 RDONLY가 쓸모 없다는 것을 깨달았습니다. 고맙습니다. 문제가 해결되었습니다. – user3078259

+0

교수님과상의하십시오. 최소한 자신의 노트를 수정해야합니다. –

3

먼저 어떤 경우에도 gets()을 피할 것입니다. 안전하지 않으며 은 (는)으로 간주됩니다. 나중에 제거 될 수 있습니다. 대신과 같이, fgets()을 사용하는 것이 좋습니다 :

fgets(c, sizeof(c), stdin); 

다음, 당신의 open는 의심 :

df=open("e:\\codeblocks\\fisperimente\\text2.txt",O_RDONLY|O_WRONLY); 

읽기 전용 및 상호 배타적 만 있습니다 쓰기. 읽기 및 쓰기를 위해 파일을 열려면 O_RDWR이 필요합니다.

마지막으로 파일에 쓰고 나면 파일 포인터가 파일의 끝을 가리 킵니다. 다시 읽으려면 처음으로 돌아 가야합니다. 당신이 그렇게되면

lseek(df, 0, SEEK_SET); 

, 당신은 다시 파일을 읽을 수

+0

이봐, lseek의 세 번째 매개 변수는 무엇을 의미합니까? – user3078259

+0

두 번째 매개 변수는 오프셋입니다. 세 번째 매개 변수는 오프셋이 상대적이라고 설명합니다. 'SEEK_SET'은 "파일 시작에 상대적입니다." 'SEEK_CUR'은 "현재 위치와 관련된"을 의미합니다. 'SEEK_END'는 "파일의 끝을 기준으로"를 의미합니다. –

+0

@ user3078259 :이 답변 중 하나가 귀하의 질문에 대한 답변 이었으면 해당 답변을 "수락 함"으로 표시하십시오. 그런 다음 "답이 없음"목록에서 질문을 제거합니다. 감사! –