文件编程

来源:互联网 发布:php 字节数组转字符串 编辑:程序博客网 时间:2024/06/06 07:36
一.系统调用
1.定义:
是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务
2.创建
函数格式:int creat(const char *filename, mode_t mode ) 
参数说明:filename :创建的文件名(包含路径,缺省为当前路径) mode:创建模式
常创建模式:
 S_IRUSR      可读
 S_IWUSR     可写
 S_IXUSR      可执行
 S_IXRWU     可读、可写、可执行


3.打开
int open(const char *pathname, int flags); (不创建文件)
int open(const char *pathname,    int flags, mode_t mode); (创建文件)

参数说明:pathname是要打开或创建的文件的名字

 flags参数可用来说明此函数的多个选择项

 mode对于open函数而言,仅当创建新文件时才使用第三个参数

mode 参数:O_RDONLY   只读打开,O_WRONLY   只写打开,O_RDWR     读、写打开
4.关闭
函数格式:int close(int fd)
5.读
函数格式:int read(int fd, const void *buf, size_t   length)
功能:从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。
6.写
函数格式:int write(int fd, const void * buf,  size_t length)
功能:把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。
7.定位
函数格式:int lseek(int fd, offset_t offset,  int whence)
功能:将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置
whence可使用下述值:
SEEK_SET:相对文件开头
SEEK_CUR:相对文件读写指针的当前位置
SEEK_END:相对文件末尾
二.用户编程接口(API)
系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务的接口。在实际使用中程序员调用的通常是用户编程接口—API
系统命令相对API更高了一层,它实际上一个可执行程序,它的内部引用了用户编程接口(API)来实现相应的功能
三.文件描述符
当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。
文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。
四.库函数
1.创建和打开
函数格式:FILE *fopen(const char *filename, const char *mode)
参数说明:filename:打开的文件名(包含路径,缺省为当前路径)mode:    打开模式
r,  rb :  只读方式打开,文件必须已存在
w,wb : 只写方式打开,如果文件不存在则创建, 如果文件已存在清空重写
a, ab: 只能在文件末尾追加数据,如果文件不存在则创建
r+,rb+,r+b:  读写方式打开,文件必须已存在
w+,w+b,wb+: 读写方式打开,如果文件不存在则创建,如果文件已存在清空重写
a+,a+b,ab+: 读和追加方式打开,如果文件不存在则创建
2.关闭
函数格式:int fclose(FILE * stream);
返回值:若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。
3.从文件流读取数据
函数格式:size_t fread(void * ptr,size_t size, size_t nmemb,    FILE * stream)
参数说明:stream为已打开的文件指针,ptr:指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。
4.将数据写至文件流
函数格式:size_t fwrite(const void * ptr, size_t  size, size_t  nmemb, FILE * stream)
参数说明: stream:为已打开的文件指针,ptr:指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。