1、open
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int open(cosnt char *pathname,int flags);
int open(cosnt char * pathname,int flags, mode_t mode);
pathname 为欲打开文件路径的字符串,flag为打开方式,可以使用“|”来连接多个运算符,返回类型为文件描述符,
2、close
#include<unistd.h>
int close(int fd);
当文件不需要再使用时,就调用该函数关闭文件,让数据写回磁盘,释放该文件占用的资源;
文件顺利关闭返回0,否则返回-1;
3、read
size_t read(int fd,void buf,size_t count);
#include<unistd.h>
read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0, 则read()不会有作用并返回0。返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据, 此外文件读写位置会随读取到的字节移动。
注意和fread参数列表的区别:
#include<stdio.h>
size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);
ptr为读取数据存放的首地址,size 为每次读取的大小,nmemb为读取的次数,stream为指向读文件流的指针
4、write
#include<unistd.h>
size_t write(int fd,const void *buff,size_t count);
write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然, 文件读写位置也会随之移动。
返回值:
如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1, 错误代码存入errno中。
注意和fwrite的区别:
#include<stdio.h>
size_t fwrite(cosnt void ptr,size_t size,size_t nmemb ,FILEstream);
ptr为要写入数据的首地址,size为每次写入的大小,nmemb为写的次数,streamw为指向写文件流的指针
5、creat
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int creat(const char * pathname, mode_tmode);
参数pathname指向欲建立的文件路径字符串。Creat()相当于使用下列的调用方式调用open()
open(const char * pathname ,(O_CREAT|O_WRONLY|O_TRUNC));
O_TRUNC:表示在文件存在且要写入的时候,将原来的数据清除,在重新写入;
返回新的文件描述符,错误返回-1,把错误代码给errno
creat无创建一个特别的装置文件,需要时使用mknod()创建一个管道文件;
6、dup/dup2
#include<unistd.h>
dup(int oldfd);
int dup2(int odlfd,int newfd);
dup()用来复制参数oldfd所指的文件描述词, 并将它返回。此新的文件描述词和参数oldfd指的是同一个文件, 共享所有的锁定、读写位置和各项权限或旗标。例如, 当利用lseek()对某个文件描述词作用时, 另一个文件描述词的读写位置也会随着改变。不过, 文件描述词之间并不共享close-on-exec旗标。
返回值:
当复制成功时, 则返回最小及尚未使用的文件描述词。若有错误则返回-1, errno会存放错误代码。错误代码EBADF参数fd非有效的文件描述词, 或该文件已关闭。
dup2()用来复制参数oldfd所指的文件描述词, 并将它拷贝至参数newfd后一块返回。若参数newfd为一已打开的文件描述词, 则newfd所指的文件会先被关闭。dup2()所复制的文件描述词, 与原来的文件描述词共享各种文件状态, 详情可参考dup()。
当复制成功时, 则返回最小及尚未使用的文件描述词。若有错误则返回-1, errno会存放错误代码。
7、fsync/sync
#include<unistd.h>
int fsync(int fd);
int sync(void);
fsync()负责将参数fd所指的文件数据, 由系统缓冲区写回磁盘, 以确保数据同步。
返回值:
成功则返回0, 失败返回-1, errno为错误代码。
sync()负责将系统缓冲区数据写回磁盘, 以确保数据同步。
返回值:
返回0
8、lseek
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int filed,off_t offset,int whence)
每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾。当read()或write()时, 读写位置会随之增加, lseek()便是用来控制该文件的读写位置。参数fildes 为已打开的文件描述词, 参数offset 为根据参数whence来移动读写位置的位移数。
参数:
whence为下列其中一种:
SEEK_SET 参数offset即为新的读写位置。
SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END 将读写位置指向文件尾后再增加offset个位移量。
当whence 值为SEEK_CUR 或SEEK_END时, 参数offet允许负值的出现。
下列是较特别的使用方式:
- 欲将读写位置移到文件开头时:lseek(int fildes,0,SEEK_SET);
- 欲将读写位置移到文件尾时:lseek(int fildes, 0,SEEK_END);
- 想要取得目前文件位置时:lseek(int fildes, 0,SEEK_CUR);
返回值:
当调用成功时则返回目前的读写位置, 也就是距离文件开头多少个字节。若有错误则返回-1, errno 会存放错误代码