2016-12-08 7 views
-1

int 여야하는 공유 파일을 만들려고합니다. 그러나int 파일을 만드는 방법

int f; 

, 내가 뭔가를 나에게 오류를 제공

if ((fstat(f, &stbuf) != 0) || (!S_ISREG(stbuf.st_mode))) 

에 도달합니다. 이 파일은 같은 문자열이 포함되어야합니다

abcd 

내 생각은 다음과 같다,하지만 그것은 작동하지 않습니다

int main() { 
    int f; 
    void *memoria = NULL; 
    int tam; 
    struct stat stbuf; 
    char string[15] = {0}; 

    f = open("fichero.txt", O_RDWR, S_IRUSR); 

    // ERROR IS HERE!! 
    if ((fstat(f, &stbuf) != 0) || (!S_ISREG(stbuf.st_mode))) { 
    printf("Error"); 
    } 

    tam = stbuf.st_size; 
    printf("%d\n", tam); 

    // Proyect the file 
    memoria = mmap(0, tam, PROT_WRITE, MAP_SHARED, f, 0); 
    // Copy the string into the file 
    memcpy(memoria, "abcd", 5); 

    munmap(memoria, tam); 

    return 0; 
} 

내가 개방의 매개 변수를 변경해야? 내가 뭘 잘못하고 있니? 감사!

+1

당신이 우리에게 당신이 얻을 오류 메시지를 줄 수 있을까요? –

+2

'open'이 성공했는지 확인하지 않고 특정 오류를 출력하지 않습니다. 따라서 디버깅이 불가능합니다. –

+0

분할 오류입니다. 나는 내가 만들지 않은 파일에 접근하려고 노력하고 있다고 생각하지만, 그렇게하고 싶지는 않습니다. 실제로 그것을 생성하고 싶습니다. –

답변

0

파일이 없으면 O_CREAT 모드를 사용해야합니다.

f = open("fichero.txt", O_RDWR | O_CREAT, S_IRUSR); 

당신은 open()에서 오류를 검사해야합니다

if (f == -1) { 
    perror("open"); 
    exit(1); 
} 
+0

파일을 만드는 중 오류가 발생했습니다 : 권한이 거부되었습니다. –

+0

쓰기 권한이없는 디렉토리에 파일을 만들려고합니다. – Barmar

+0

전체 경로 이름을 사용하여 쓰기가 가능한 디렉토리에 파일을 생성하십시오. – Barmar