linux的文件采用的是索引结构,文件存储在不连续的存储块中,这些块的块号记录于索引块中。索引块称为inode结构,inode结构中与用户有关的信息:
mode ------ 文件的权限及类型
link count ------ 包含本inode项的目录个数
user id ------ 文件所有者的用户id
group id ------ 文件所有者所在组的id
size ------ 文件大小
access time ------ 文件上次被访问的时间
mod time ------ 文件上次被修改的时间
block list ------ 包含文件第一段的磁盘块号列表
indirect list ------ 包含文件其它内容(除第一段)的磁盘块号列表
文件类型记录在stat结构中的st_mode域中,可以用以下的宏来决定文件类型,每个宏的参数是stat结构中的st_mode值
S_ISREG() ------ 正规文件
S_ISDIR() ------ 目录文件
S_ISCHR() ------ 字符设备文件
S_ISBLK() ------ 块设备文件
S_ISFIFO()------ 有名管道文件
S_ISLNK()------ 符号链接文件
S_ISSOCK()---- 套接字文件
顺序文件操作
打开文件:
#include
#include
#include
int open(const char* pathname,int oflag,.../*mode_t mode*/);
正确返回:文件描述符
错误返回:-1
参数描述:
pathname:待打开或创建的文件名
oflag:如何打开文件,必须包含以下三个中的一个
O_RDONLY ------ 只读方式打开
O_WRONLY ------ 只写方式打开
O_RDWR ------- 读写方式打开
还可以按位逻辑加( | )组合下列标志
O_APPEND ------ 每次写文件从文末开始
O_CREAT ------ 文件不存在则创建,必须带第三个参数mode设置新文件的访问方式
O_EXCL ------ 检查文件是否存在,以及不存在时创建文件的情况
O_TRUNC ------ 如果文件存在,而且以只写或读写方式打开,将文件长度截至0
mode:如果用open创建文件就要使用,其用来规定文件所以者、用户组、其它用户的访问权限。逻辑加组合下列常量
中定义
S_IRUSER ------ 文件所有者的读权限位
S_IWUSER ------ 文件所有者的写权限位
S_IXUSER ------ 文件所有者的执行权限位
S_IRGRP ------ 文件用户组的读权限位
S_IWGRP ------ 文件用户组的写权限位
S_IXGRP ------ 文件用户组的执行权限位
S_IROTH ------ 文件其它用户的读权限位
S_IWOTH ------ 文件其它用户的写权限位
S_IXOTH ------ 文件其它用户的执行权限位
还可以用下列常量设置set _uid位和set_gid位:
S_ISUID
S_ISGID
当一个进程代表你创建文件时,权限位由该进程相联系的umask值所修改,进程利用如下公式决定文件的实际权限位:
mode &(~umask);
posted on 2005-12-07 16:10 vivip 阅读(182) 评论(0) 编辑 收藏 引用 所属分类: 学习笔记