`
hulianwang2014
  • 浏览: 692345 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

[APUE]第四章 文件和目录

 
阅读更多

第四章 文件和目录

本章主要围绕stat这个函数来讲的。

int stat(const char* pathname, struct stat* buf);
int fstat(int fd, struct stat* buf);
int lstat(const char* pathname, sttuct stat* buf);	//如果是符号链接,返回符号链接的文件信息
struct stat{
mode_t 	st_mode;
ino_t 	st_ino;
dev_t 	st_dev;
dev_t	st_rdev;
nlink_t	st_nlink;
uid_t	st_uid;
gid_t	st_gid;
off_t		st_size;
time_t	st_atime;
time_t	st_mtime;
time_t	st_ctime;
blksize_t	st_blksize;
blkcnt_t	st_blocks;
};

文件类型有普通文件、目录文件、字符设备文件、块设备文件、FIFO文件、socket文件、符号链接七种文件类型。保存在stat结构中的st_mode中,分别有宏可以测试文件类型。

设置用户ID和设置组ID

这两个是权限管理使用的。当设置了设置用户ID就会是运行用户的有效用户ID设置成这个文件的所有者,这样运行这个用户就获得了,这个文件所有者的权限。设置组也是一样的道理。一般是通过chmod +0xabc来设置用户ID和组ID位的其中x=4 设置用户ID位,x=2设置组ID位。这两个位是保存在st_mode中的,也有宏可以测试这个位是否存在。

新文件和目录的访问权限:

新文件的用户ID设置成进程的有效用户ID,组ID或者是文件所在目录的ID或者hi进程的有效用户ID。

int access(const char* pathname, int mode) //以实际用户来查看文件权限 mode 可以使R_OK (读) W_OK(写) X_OK(执行) F_OK(存在与否)
mode_t umask(mode_t cmask);//设置文件模式创建屏蔽字。
int chmod(const char* pathname, mode_tmode);//给文件赋权限。
int fchmod(int fd ,mode_t mode);//给打开的文件赋权限。
int chown(const char* pathname, uid_towner, gid_t group).//修改文件的用户ID和组ID

文件空洞。

int truncate(const char* pathname, off_tlength)//把文件截断长度为length
int ftruncate(int fd, off_t length);

文件系统:


上面这图是整个文件系统的概述。


上面这图是目录结构i节点和目录项之间的关系。也可以查看i节点和文件的关联(p87)

int link(const char* pathname, const char*newpath)		//创建一个以pathname相同i节点的新目录项
int unlink(const char* pathname)						//删除一个目录项
int remove(const char* pathname)					//可以删除文件或者目录。
int rename(const char* oldname, const char*newpath)		//文件更名

文件时间

stat结构有st_atime(访问时间[l1])、st_mtime(内容修改时间)、st_ctime(i节点信息修改时间)

目录操作

int mkdir(const char* pathnamer, mode_tmode)//创建一个空目录
int rmdir(const char* pathname)//删除空目录
DIR* opendir(const char* pathname)
struct dirent* readdir(DIR* dp);
closedir(DIR* dp);
void rewinddir(DIR* dp);
long telldir(DIR* dp)
void seekdir(DIR * dp, long loc)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics