UNIX環境でCプログラミング言語を使用して空のファイルを生成するときに発生する問題

UNIX環境でCプログラミング言語を使用して空のファイルを生成するときに発生する問題

私は最近UNIX環境でプログラミングを始めました。このコマンドを使用して、端末で指定された名前とサイズで空のファイルを生成するプログラムを作成する必要があります。

gcc foo.c -o foo.o 
./foo.o result.txt 1000

ここで、result.txtは新しく作成されたファイルの名前を表し、1000はファイルサイズ(バイト単位)を表します。

私は確信しています探す関数はファイルオフセットを移動しますが、問題はプログラムを実行するたびに指定された名前のファイルを生成しますが、ファイルサイズが次のようになることです。0

これは私のアプレットのコードです。

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
int main(int  argc, char **argv)
{
    int fd;
    char *file_name;
    off_t bytes;
    mode_t mode;

    if (argc < 3)
    {
        perror("There is not enough command-line arguments.");
        //return 1;
    }

    file_name = argv[1];
    bytes = atoi(argv[2]);
    mode = S_IWUSR | S_IWGRP | S_IWOTH;

    if ((fd = creat(file_name, mode)) < 0)
    {
        perror("File creation error.");
        //return 1;
    }
    if (lseek(fd, bytes, SEEK_SET) == -1)
    {
        perror("Lseek function error.");
        //return 1;
    }
    close(fd);
    return 0;
}

ベストアンサー1

ファイルの終わりを見ている場合は、その場所に少なくとも1バイトを書き込む必要があります。

write(fd, "", 1);

オペレーティングシステムにスペースをゼロで埋めるようにします。

したがって、特定のサイズの1000の空のファイルを生成するには、lseek次の手順を実行します。

lseek(fd, 999, SEEK_SET); //<- err check
write(fd, "", 1); //<- err check

ftruncateおそらくより良いだろうし、簡単にまれなファイルを生成するようです。

ftruncate(fd, 1000); 

おすすめ記事