- 头文件说明
以下各函数均在<unistd.h>中
flags的各个值定义于<fcntl.h>中
BUFSIZ定义于<stdlib.h>中 (似乎<stdio.h>中也有)
- 打开或创建文件
int open(char *filename, int flags, int perms);int creat(char *name, int perms);flags 在linux中定义在 <fcntl.h> 中主要值有三个 O_RDONLY O_WRONLY O_RDWRperms即unix文件权限,用三位八进制数表示,比如0666 0755对于open,perms填0就可以读取(就目前所知)open打开一个不存在的文件会出错
而creat创建一个不存在的文件不会出错open和creat如果成功的打开文件会返回 文件描述符,否则返回 -1操作系统默认的三个文件操作符 0 1 2
分别代表stdin stdout stderr
- 关闭文件与删除文件
int close(int fd);
用于断开与文件的链接 释放文件描述符int unlink(char *filename);
用于删除文件close和unlink若执行成功则返回 0, 否则返回 -1
- 读取文件与写入文件
int read(int fd, char *buf, int n );
int write(int fd, char *buf, int n);buf是缓冲区可以是一个数组名, 也可以时char指针, 还可以是 &c (即一个char变量的地址, 不过此时每次只能传输一位)n为每次要传输的字节数(并不一定为真实传输的字节数)n如果很小,则需要频繁读取,会大大降低操作效率因此n大小需要合适,(BUFSIZ 定义于stdlib.h文件中,对于所用操作系统是一个比较合适的值)read和write的返回值均为真实传输的字节数read和write都会在上次文件操作之后的位置开始操作若需要在文件中移动,需要用下面的lseek函数
- 游标移动
int lseek(int fd, long offset, int origion);lseek可以在文件中随意移动而不会修改文件内容其中offset是相对于origin移动的距离offset是可以为负值的 比如-10L (注意offset为long 因此需加上L或l)origin可以为 0 1 2分别代表文件头 当前位置 文件尾