2016-12-08 60 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

関連する問題