Linux系统调用之文件管理
linux下的文件管理可以通过标准I/O库提供的函数来完成,也可以通过linux系统提供的系统调用来实现。
一、系统调用列表
1、头文件:
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
2、系统调用原型
size_t write(int fildes,const void *buf,size_t nbytes);
size_t read(int fildes,void *buf,size_t nbytes);
int open(const char *path,int oflags);
int open(const char *path,int oflags,mode_t mode);
int close(int fildes);
int ioctl(int fildes,int cmd,...);
off_t lseek(int fildes,off_t offest,int whence);
int fstat(int fildes,struct stat *buf);
int stat(const char *path,struct stat *buf);
int lstat(const char *path,struct stat *buf);
int dup(int fildes);
int dup2(int fildes,int fildes2);
二、系统调用说明
1、write
原型:size_t write (int fildes, const void *buf, size_t nbytes);
用法:#include <unistd.h>
说明:从buf所指的缓冲区写nbytes字节到fildes描述的文件中。
返回值:成功,返回已写的字节数;失败,返回-1。
2、read
原型:size_t read (int fildes, void *buf, size_t nbytes);
用法:#include <unistd.h>
说明:从fildes描述的文件中读取nbytes字节写入到buf缓冲区。
返回值:成功,返回读取的字节数;失败,返回-1。
3、open
原型:int open (const char *path, int oflags);
int open (const char *path, int oflags, mode_t mode);
用法:#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
说明:返回一个文件描述符,它是唯一的,不会与任何其他运行中的进程共享。两个进程同时打开同一个文件,会得到两个不同的文件描述符。
返回值:成功,返回文件描述符;失败,返回-1。
参数说明:oflags必选参数:O_RDONLY(只读方式),O_WRONLY(只写方式),O_RDWR(读写方式)之一;
oflags可选参数(常见):
O_APPEND:把写入的数据追加在文件的末尾
O_CREAT:如果文件不存在就创建,启用mode参数
O_EXCL:与O_CREAT一起使用,确保调用者创建出文件,open是一个原子操作,也就是说,它只执行一个函数调用,使用这个可选模式可以防止两个程
序同时创建一个文件。如果文件已经存在,open调用将失败
mode参数:
S_IRUSR:读权限,文件属主
S_IWUSR:写权限,文件属主
S_IXUSR:执行权限,文件属主
S_IRGRP:读权限,文件所属组
S_IWGRP:写权限,文件所属组
S_IXGRP:执行权限,文件所属组
S_IROTH:读权限,其他用户
S_IWOTH:写权限,其他用户
S_IXOTH:执行权限,其他用户
4、close
原型:int close (int fildes);
用法:#include <unistd.h>
说明:终止一个文件描述符fildes与其对应文件之间的关联,文件描述符被释放并能够重新使用
返回值:成功,返回0,;失败返回-1
5、ioctl
原型:int ioctl (int fildes, int cmd, ...);
用法:#include <unistd.h>
说明:ioctl对描述符fildes指定的对象执行cmd参数给出的操作,根据特定设备所支持函数的不同,还可能会有一个可选的第三个参数;cmd是一个设备相关的参数
返回值:成功,返回0;失败,返回-1
6、lseek
原型:off_t lseek (int fildes, off_t offset, int whence);
用法:#include <unistd.h>
#include <sys/types.h>
说明:根据whence参数,将fildes关联的文件的偏移位置重定位到offset参数指定的位置
返回值:成功,返回从文件头偏移位置,以字节为单位;失败,返回(off_t)-1
参数说明:whence
SEEK_SET:返回值就是offset
SEEK_CUR:返回值是当前位置加offset
SEEK_END:返回值是文件大小加offset
7、fstat,stat,lstat
原型:int fstat (int fildes, struct stat *buf);
int stat (const char *path, struct stat *buf);
int lstat (const char *path, struct stat *buf);
用法:#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
说明:fstat返回fildes关联的文件的信息,存储在buf中;当文件是一个符号链接时,lstat返回的是符号链接本身的信息,而stat返回的是该链接指向的文件的信息
返回值:成功,返回0;失败,返回-1
8、dup,dup2
原型:int dup (int fildes);
int dup2 (int fildes, int fildes2);
用法:#include <unistd.h>
说明:dup,dup2创建文件描述符的副本,dup返回的新描述符是当前可用的描述符中最小的;dup2返回fildes2,若fildes2已经打开,则先关闭,若fildes1=fildes2,则dup2返回fildes2,而不关闭它
返回值:成功,返回新的描述符;失败,返回-1