C
在 UNIX 環境中使用 C 程式語言創建空文件的問題
我最近開始在 UNIX 環境中程式。我需要編寫一個程序,該程序使用此命令在終端中創建一個具有名稱和大小的空文件
gcc foo.c -o foo.o ./foo.o result.txt 1000
這裡的 result.txt 表示新創建的文件的名稱,1000 表示文件的大小(以字節為單位)。
我確定lseek函式會移動文件偏移量,但問題是每當我執行程序時,它都會創建一個具有給定名稱的文件,但是文件的大小是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; }
如果您在文件末尾之後查找,則必須在該位置寫入至少一個字節:
write(fd, "", 1);
讓作業系統用零填充這個洞。
因此,如果您想使用 1000 創建一個特定大小的空文件
lseek
,請執行以下操作:lseek(fd, 999, SEEK_SET); //<- err check write(fd, "", 1); //<- err check
ftruncate
可能更好,它似乎也可以毫不費力地創建稀疏文件:ftruncate(fd, 1000);
您沒有向文件寫入任何內容。
您打開文件,移動文件描述符,然後關閉它。
從 lseek 手冊頁
lseek() 函式根據指令 wherece 將文件描述符 fildes 的偏移量重新定位到參數偏移量。