码迷,mamicode.com
首页 > 其他好文 > 详细

文件操作函数

时间:2015-02-21 21:12:06      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:linux c   文件操作   

open函数

原型:

int open(const char *pathname,int flags);

int open(const char *pathname,int flags,mode_t mode);


flags

必需选项,必选其中之一

O_RDONLY(只读),O_WRONLY(只写),O_RDWR(读写)

可选:

O_APPEND

使每次对文件进行写操作都追加到文件的尾端

O_CREAT

如果文件不存在,则创建它,要同时使用第三个参数指定新文件的权限

O_EXCL

查看文件是否存在,如果文件已存在同时指定了O_CREAT,则会产生错误,这样可以安全的打开文件

O_TRUNC

将文件长度截断为0,如果文件存在,并且成功打开,则会将其长度截短为0

O_NONBLOCK

以非阻塞模式打开,默认为阻塞模式,即读写操作需要等待操作的返回状态


mode

必须结合flags的O_CREAT使用,否则无效

S_IRWXU

00700

S_IRUSR

00400

S_IWUSR

00200

S_IXUSR

00100

S_IRWXG

00070

S_IRGRP

00040

S_IWGRP

00020

S_IXGRP

00010

S_IRWXO

00700

S_IROTH

00004

S_IWOTH

00002

S_IXOTH

00001





close函数

原型:int close(int fd);



read函数

原型:ssize_t read(int fd,void *buf,size_t count);

返回所读到的字节数


write函数

原型:ssize_t write(int fd,const void *buf,size_t count);

成功返回写入字节数,出错返回-1

写操作函数并不能保证将数据成功地写入磁盘,write()通常将数据写入缓冲区,在合适的时机又系统写入实际的设备,可以调用fsync()显式将输入写入设备。


lseek函数

原型:off_t lseek(int fildes,off_t offset,int whence);

fildes为描述符,offset为偏移大小,whence为操作模式

lseek操作成功返回新的文件偏移量,如果失败返回-1,文件的偏移量可以为负值,所以不能使用返回值是否小于0判断是否成功。要使用是否等于-1判断。

whence:

SEEK_SET

相对于文件开始处

SEEK_CUR

相对于文件当前位置

SEEK_END

相对于文件结尾的位置

允许存在空洞文件


fstat函数

原型:int stat(const char *path,struct stat *buf);

        int fstat(int filedes,struct stat *buf);

        int lstat(int filedes,struct stat *buf);

成功返回0,错误返回-1

struct stat {

dev_t st_dev;//此文件所处设备的设备ID号

ino_t st_ino; //inode数值

mode_t st_mode; //保护设置

nlink_t st_nlink; //硬链接数

uid_t st_uid; //文件所有者的ID

gid_t st_gid; //文件所有者的组ID

dev_t st_rdev; //设备ID

off_t st_size; //以字节计的大小

blksize_t st_blksize; //文件系统的块大小

blkcnt_t st_blocks; //占用的块的数量

time_t st_atime; //最后访问时间

time_t st_mtime; //最后修改时间

time_t st_ctime; //最后状态改变时间

}


mmap函数

说明:mmap函数将文件或设备空间映射到内存中,可以通过对映射后的内存空间存取来获得与存取文件一致的控制方式。不必再使用read、write函数。映射到的内存不占用空间,仅仅占用一段地址空间

原型:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offset);

成功返回映射的内存地址,失败返回(void *)-1,通过errno返回错误方式

start指定要映射的内存空间,一般为NULL,表示由系统决定。length为长度,文件从offset处开始,fs通常是open的返回值。

prot表示映射区的保护方式,为一下一个或多个,但都打开时的限制

PROT_EXEC

映射区域可执行

PROT_READ

映射区域可读

PROT_WRITE

映射区域可写

PROT_NOTE

不能存取

flags与open函数的类似。必须为MAP_SHARED或MAP_PRIVARE两者之一的类型。MAX_PRIVATE类型的,每个进程之间的副本是不一样的

MAP_FIXED

如果start指定了映射地址,而该地址无法获得,则映射失败

MAP_SHARED

共享的映射区域,允许其他进程共享,对映射区写入数据将会写入原来的文件

MAP_PRIVATE

对文件写操作时会产生一个映射文件的复制,即copy on write。对映射区的修改不会影响原文件

MAP_ANONYMOUS

建立匿名映射。此时会忽略参数fd,不涉及文件,而且映射区域无法和其它进程共享

MAP_DENYWRITE

对文件的写入操作将被禁止,只能通过对此映射区的操作。不允许直接对文件进行操作

MAP_LOCKED

将映射区锁定,此区域不会被虚拟内存重置



munmap函数

原型:int munmap(void *start,size_t length);

fcntl函数:

原型:int fcntl(int fd,int cmd);

        int fcntl(int fd,int cmd,long arg);

        int fcntl(int fd,int cmd,struct flock *lock);

操作成功,返回值依赖于cmd,失败返回-1

以下4个有特殊返回值:

F_DUPFD

返回新的描述符

F_GETFD

获得的相应标志

F_GETFL

文件描述符的状态标志

F_GETOWN

如果是正数则是进程的ID号,负数则是进程组ID号


分六类功能:

F_DUPFD

复制文件描述符

F_GETFD/F_SETFD

获得/设置文件描述符

F_GETFL/F_SETFL

获得/设置文件状态值

F_GETOWN/F_SETOWN/F_GETSIG/F_SETSIG

获得/设置信号发送对象

F_GETLF/F_SETLK/F_SETLKW

获得/设置信号锁

F_GETLEASE/F_SETLEASE

获取/设置文件租约


对前四种进行介绍:

F_DUPFD用于复制文件描述符fd,获得新的文件描述符作为函数值返回。获得的文件描述符是尚未使用的描述符中大于或等于第3个参数值中最小值。

F_GETFD获得文件描述符

F_SETFD设置文件描述符

F_GETFL标志获得文件描述符fd的文件状态标志。标志含义如下:

O_RDONLY

只读

O_WRONLY

只写

O_RDWR

读写

O_APPEND

写入是添加至文件尾部

O_NONBLOCK

非阻塞方式

O_SYNC

写等待

O_ASYNC

同步方式

三种存取方式(O_RDONLY、O_WRONLY、O_RDWR)三种方式不是各占一位,而是0、1、2,要正确的获取他们的值,只能用O_ACCMODE获得存取位。



F_SETFL只能修改以下标志位:O_APPEND、O_ASYNC、O_SYNC、O_DIRECT、O_NOATIME、O_NOBLOCK


ioctl函数

原型:int ioctl(inf d,int request,...);

取决于具体驱动程序的编写。





本文出自 “重剑无锋” 博客,请务必保留此出处http://qianyang.blog.51cto.com/7130735/1614926

文件操作函数

标签:linux c   文件操作   

原文地址:http://qianyang.blog.51cto.com/7130735/1614926

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!