私は最近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);