linux文件操作

打开文件fopen

1
2
#include 
FILE *fopen(char *filename,char *type);

type为[B][C]组合字符串.

A:

1
2
3
* r: 读, 指针设0, 不改变文件长度;
* w: 写, 文件不存在时文件被创建, 文件存在时文件长度设为0, 指针设为0;
* a: 追加写, 指针设为文件尾

B:

1
2
* b: 二进制方式打开 
* t: 文本方式打开

C:

1
* +: 可以同时input/output, 使用时必须注意用fflush或者fseek来防止内置buffer没消耗干净

读文件fread/写文件fwrite

1
2
3
4
#include 
size_t fread(void *ptr, size_t size, size_t nmembFILE *stream );
size_t fwrite(const void *ptr, size_t size, size_t nmemb,
FILE *stream);

fwrite()的语义是写入nmembsize大小的对象, 返回值为写入对象的数量(而不是总共的字节数).

空间预分配posix_fallocate

1
2
#include 
int posix_fallocate(int __fd, off_t __offset, off_t __len);

据说还有个linux版本的 http://man7.org/linux/man-pages/man2/fallocate.2.html:

1
2
3
#define _GNU_SOURCE      /* See feature_test_macros(7) */
#include
int fallocate(int fd, int mode, off_t offset, off_t len);

改变文件大小ftruncate

将文件大小改变为参数length指定的大小,如果原来的文件大小比参数length大,则超过的部分会被删除,如果原来的文件大小比参数length小,则文件将被扩展.

1
2
#include 
int ftruncate (int __fd, __off_t __length);

注意这个操作不会改变当前指针, 比如缩小文件为0时, 并不会将指针置0.