linux操作系统中POSIX文件及目录管理
2012-10-11 16:09:39 来源:WEB开发网 在linux操作系统中,实现了两类对文件IO的管理,一类是遵循POSIX标准,linux操作系统自身提供的IO系统调用,如open、close、read等函数;另一类是由ANSI标准提供的标准IO库函数,这些函数是对直接IO系统调用的封装,其在访问文件时根据需要设置了不同类型的缓冲区,从而减少了直接IO系统调用的次数,提高访问效率。
1、 文件流与文件描述符的区别:
使用ANSI C函数fopen打开的文件对应一个流文件,任何进程在运行的时候,都默认打开了3个流对象。对于用户空间来说,任何打开的文件都将被分配一个唯一非整数,用于标识该打开文件,该值即文件描述符。
2、 文件描述符与文件流的转换操作:
Linux为用户层提供了函数fileno()以从文件流中读取其文件描述符,即获得struct FILE的_fileno成员
Int fileno (FILE *_stream) 此函数以某个流对象为参数,返回该流的文件描述符值。
FILE *fdopen(int _fd,_const char *_modes) 此函数第一个参数为一个文件描述符,第2个参数为封装该流的权限。
3、 POSIX标准下文件IO管理:
1)、打开文件
Int open(_const char *file,int _oflag,…) 第1个参数为欲打开文件的路径,第2个参数为打开文件的方式,第3个参数可有可无,自动创建该文件,它规定了文件的权限。
2)、关闭文件
Int close(int _fd)关闭文件,将相应的内容全部写回文件中,即让数据写回磁盘。
3)、创建文件
Int creat(_const char *_file,_mode_t _mode) 第1个参数为欲创建文件的路径,第2个参数为该文件的访问权限。
4)、文件控制
Int fcntl(int _fd,int _cmd) 第1个参数fd为欲修改属性的文件描述符,第2个参数cmd为相应的操作,常用命令如下:
#define F_DUPFD 0 //复制文件描述符
#define F_GETFD 1 //获得文件描述符标志
#define F_SETFD 2 //设置文件描述符标志
#define F_GETFL 3 //获取文件状态
#define F_SETFL 4 //设置文件状态
5)、读文件内容
Ssize_t read (int _fd,void *_buf,size_t _nbytes)
从参数fd所指的文件中读取_nbytes数据到buf指针所指的内存中。
6)、写内容到文件
Ssize_t write (int _fd , _const void *_buf , size_t _n)
将buf为起始地址的缓冲区前n个字节写入与打开文件描述符fd关联的文件内。
7)、文件定位
_off_t lseek(int _fd , _off_t _offset , int _whence)
第1个参数为已经打开的文件,第2个参数offset为位移数,第3个参数为参考点。
8)、同步内核缓冲区
为了保证磁盘上实际文件系统与缓存中的内容的一致性,sync、fsync和fdatasync系统调用可以更新缓冲区。
Void sync(void) 将所有修改写的块的缓存排入写队列,然后返回,不等待实际IO操作结束。
Int fsync(int fildes) 等待IO结束,然后返回,多用于于数据库相关的应用程序,它确保修改过的块立即写到磁盘上。
Int fdatasync(int fildes) 只更新内容。
4、 目录文件基本操作
1)、打开目录文件
DIR *opendir(const char *dirname) 打开路径为dirname 的目录,并使一个目录流与它相关联。
2)、关闭目录文件
int closedir(DIR *dirp) 关闭指定的目录流,然后释放与DIR指针关联的结构
3)、读目录内容
Struct dirent *readdir(DIR *dirp) 读取该目录下的文件列表,该函数的返回类型为struct dirent。
Int readdir_r (DIR *dirp ,struct dirent *entry, struct dirent **result) 实现多线程读取目录内容操作
4)、定位目录位置
Long int telldir(DIR *dirp) 目录流相关联的当前位置
- ››linux下两台服务器文件实时同步方案设计和实现
- ››Linux文件描述符中的close on exec标志位
- ››Linux下管道使用的一些限制
- ››Linux 误删/usr/bin 解决方法
- ››linux 添加新用户并赋予sudo执行权限
- ››linux常用软件安装方法
- ››Linux的分区已经被你从Windows中删除,系统启动后...
- ››linux enable命令大全
- ››Linux实现基于Loopback的NVI(NAT Virtual Interfa...
- ››Linux远程访问windows时,出现"连接被对端重...
- ››linux中使用head命令和tail命令查看文件中的指定行...
- ››linux swap 分区调控(swap分区 lvm管理)
更多精彩
赞助商链接