文件编程

来源:互联网 发布:ubuntu重置软件设置 编辑:程序博客网 时间:2024/06/08 08:58

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
普通文件长度截断为零
MODE:
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    文件尾


0 0