include <sys/types.h>
include <sys/stat.h>
include <fcntl.h>
include <unistd.h >
文件类型:普通文件,链接文件,设备文件,目录文件
带缓冲
C语言的库函数,不依赖操作系统,任何可以使用C库函数的系统都可以用
常用API:
- FILE *fopen(const char *filename,const char *mode);
filename:打开文件的文件名,mode打开模式
FILE * 为结构体指针
{
int cnt;
char *ptr;
char *base;
int flag;
int fd;
}
}
mode:
"r" : 只读,文件必须存在
"r+" : 可读可写,文件必须存在
"w" : 只写,文件不存在则创建
"w+" : 可读可写,文件不存在则创建
"a" : 追加,文件不存在则创建
"a+" : 读和追加,文件不存在则创建
"b" : 区分二进制文件和文本文件
- FILE *fdopen(int fd,const char *mode);
将文件描述符转化为对应文件的文件指针,然后返回
mode为创建文件时定义的模式,用库函数mode
- int fclose(FILE *stream);
关闭文件,成功返回0,错误返回EOF,并设置errno
- size_t fread(void *ptr,size_t size,size_t n,FILE *stream);
stream : 读文件的文件指针
size : 读取的文件每个字段的长度
n : 读取n个字段
ptr : 读取到ptr指向的内存空间中
成功返回实际读取的字段数,失败返回EOF
- size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream);
参数同上,将ptr指向内存的字符串传到文件中,返回实际写入的字段数
- int fseek(FILE *stream,long int offset,int whence);
调节文件位置指针,相对头,尾,当前位置偏移
offset : 偏移量,可正可负可零
whence : 位置宏 SEEK_SET 文件头
SEEK_CUR 当前位置
SEEK_END 文件尾
不带缓冲(系统编程)
- int creat(const char *filename,mode_t mode);
创建一个文件
filename 为文件名,mode 为创建文件的模式
- int open (const char *pathname,int flags);
- int open (const char *pathname,int flags,mode_t mode);
打开一个文件,打开成功返回文件描述符,失败返回-1,并置位errno
打开已有文件用第一个,打开一个新文件用第二个
flags参数:
O_RDONLY
| 只读打开 |
O_WRONLY |
只写打开
|
O_RDWR
| 可读可写 |
O_CREAT |
文件存在则打开,不存在则创建,(需说明mode)
|
O_EXCL | O_CREAT |
和O_CREAT合用,不存在则创建,存在则出错
|
O_APPEND |
追加,只能从文件后面写
|
O_NONBLOCK
|
设置非阻塞方式
|
O_TRUNC
|
普通文件长度截断为零
|
S_IRUSR 只读 USR | GPR | OTH
S_IWUSR 只写 0 6 4 4
S_IXUSR 可执行
S_IXRWU 可读可写可执行
用户
errno只有一个,只能暂时保存错误
void perror (const char *); 显示错误信息
int close(int fd);
关闭文件
int read(int fd,const void *buf,size_t length);
功能描述:从fd读length字节长度,读到buf所指向的缓冲区
返回值:成功读取返回实际读取字节长度,读到文件结束符返回0,-1读写失败
int write(int fd,const void *buf,size_t length);
同上
int lseek (int fd,offset_t offset,int whence);
功能描述:将文件读写指针相对whence移动offset个字节
offset -> 可正可负可零
whence -> 文件头文件尾当前位置
返回值:文件指针相对于文件头的位置
SEEK_SET 0 文件头
SEEK_CUR 1 当前位置
SEEK_END 2 文件尾