文件操作函数

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,...);

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

时间: 2025-01-20 03:30:37

文件操作函数的相关文章

C语言文件操作函数的编写

 编写文件操作的头文件 /************************************************************************** Copyright(C)    :2014-08-5 toto Filename       :file.h Author          :涂作权 Version         :V1.1 Date            :2014-08-05 Description     :文件操作的头文件 Others  

总结文件操作函数(二)-C语言

格式化读写: #include <stdio.h> int printf(const char *format, ...);                   //相当于fprintf(stdout,format,-); int scanf(const char *format, -); int fprintf(FILE *stream, const char *format, ...);      //中间的参数为写入文件的格式 int fscanf(FILE *stream, const

c语言文件操作函数

c语言文件操作函数大全 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. w 打开只写文件,若文件存在则文件长度清为0,即该文件

C语言样式的文件操作函数

使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: 1 //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 2 FILE* fd = fopen(filename.c_str(), oflag); 2.写文件的函数原型: size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream ); 其中buffer是需要向文件中写入的内容在内存中的首地址指针,size是待写入

PHP5.4 文件操作函数 之 图片计数器的实例

1.访问文件或者文件夹相关函数 <?php echo filetype('c:\windows').'<br>'; ?> <?php echo filetype('c:\windows\regedit.exe').'<br>'; ?> <?php $arr=scandir("c:\\"); var_dump($arr); ?> <?php $arr=scandir("c:\\"); foreach($

PHP部分文件操作函数

1 (1)  fopen 打开文件函数  (R-只读 W-写入 A-读写) fopen (路径和文件名,打开方式) 2  fread 读取文件内容 (字节为单位) 3 (3)  filesize 读取文件大小,字节为计量单位 filesize (路径和文件名) 4 (4)  fwrite 写入文件内容 fwrite (路径和文件名,写入的内容) (5)  fclose 关闭打开的文件 fclose (路径和文件名) PHP部分文件操作函数,布布扣,bubuko.com

文件操作函数及文件流详解

这几天着重研究了一下文件操作函数的原理及实现,在这里与大家分享一下----开心 1.文件流 2.几种文件操作函数 (1)  fopen (2) fclose (3)fread (4)fwrite (5)fgets (6)fputs 先来看FILE结构体: #ifndef _FILE_DEFINED struct _iobuf { char *_ptr;//文件缓存的当前位置 int _cnt;//缓存里可以读取的字节数 char *_base;//文件缓存的起始位置 int _flag; int

总结文件操作函数(一)-C语言

在进程一开始运行,就自动打开了三个对应设备的文件,它们是标准输入.输出.错误流,分别用全局文件指针stdin.stdout.stderr表示,对应的文件描述符为0,1,2:stdin具有可读属性,缺省情况下是指从键盘的读取输入,stdout和stderr具有可写属性,缺省情况下是指向屏幕输出数据. 将文件路径转化为文件指针: #include <stdio.h>  //头文件包含 FILE *fopen(const char *pach,const char *mode);  //文件名  模

总结文件操作函数-目录(三)-C语言

获取.改变当前目录: 原型为: #include <unistd.h>   //头文件 char *getcwd(char *buf, size_t size); //获取当前目录,相当于pwd命令 int chdir(const char *path); //修改当前目录,即切换目录,相当于cd命令 其中getcwd()函数:将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小. 在调用此函数时,buf所指的内存空间要足够大,若工作目录绝对路径的字符串长度超

第二讲文件操作函数(第139讲)

一:file_get_contents(filename) 和 file_put_contents(filename, data) 1 <?php 2 /** 3 file_get_contents(filename) 可以获取一个文件的内容或一个网络资源的内容 4 该函数是读取文件/网络资源比较快捷方式,它封装了打开/关闭等操作 5 注意:该函数会把文件中的内容一次性全部读出,然后放到内存中,因此,过大的文件慎重用该函数打开 6 */ 7 //当前目录下的a.txt文件 8 $file = &qu