-4

次のコードを書きました。

ファイル名を受け入れ、それを作成して書き込む必要があります。何も起こりません。理由がわかりません。検索してみましたが、同様の例がうまくいくはずです。問題があれば、XubuntuでVirtualBoxを使用しています。

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <time.h>
#include <assert.h>
#include <errno.h> 
#include <string.h>

#define SIZE_4KB        4096
#define FILE_SIZE       16777216



/*Generate a random string*/
char* randomStr(int length)
{
        int i = -1;
        char *result;
        result = (char *)malloc(length);
        while(i++ < length)
        {
                *(result+i) = (random() % 23) + 67;
                if(i%SIZE_4KB)
                        *(result+i) = '\0';
        }
        return result;
}

void writeFile(int fd, char* data, int len, int rate)
{
        int i = 0;
        len--;
        printf("Writing...\n");
        printf("to file %d :", fd);
        while(i < len)
        {
                write(fd, data, rate);
                i += rate;
        }
}

int main(int argc, char** argv)
{
        int i = -1, fd;
        char *rndStr;
        char *filePath;      
        assert (argc == 2);
        filePath = argv[1];
        rndStr = randomStr(FILE_SIZE);
        printf("The file %s was not found\n", filePath);
        fd = open(filePath, O_CREAT, O_WRONLY);
        writeFile(fd, rndStr, FILE_SIZE, SIZE_4KB);
        return 0;
}
4

1 に答える 1

3

open呼び出しが間違っています。複数のフラグは、引数を OR で組み合わせて指定します。また、ファイルを作成する場合、3 番目の引数は、ファイルに設定したいパーミッションにする必要があります。したがって、open呼び出しは次のようになります。

fd = open(filePath, O_CREAT | O_WRONLY, 0666);
if (fd < 0)
    Handle error…

システム コールとライブラリ関数からの戻り値を常にテストして、エラーが発生しているかどうかを確認する必要があります。

于 2012-11-08T21:53:11.120 に答える