APUE第四章 文件和目录
1、文件类型
在unix中,大部分外部设备被抽象成文件,最常见的是普通文件和目录,但是还有其他的一些文件类型。文件类型包括:
- 普通文件(regular file)
- 目录文件(directory file)
- 块特殊文件(block special file)
- 字符特殊文件(character special file)
- FIFO
- 套接字(socket)
- 符号链接(symbolic link)
可以使用stat filename查看文件类型
2、stat,fstat和lstat函数
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf);描述:根据pathname,返回与此命名文件相关的信息结构,与lstat不同的是:若文件是符号链接,stat获取的是符号链指向文件的信息,lstat直接返回该符号链接的信息结构。三个函数调用成功返回0,调用失败返回-1。
3、文件访问权限
- 打开任一类型的文件,需要对该名字包含的每一个目录,包含隐含的当前目录都具有执行权限。
- 对于一个文件的续写权限决定了能否对一个文件进行读写操作。这与open函数的标志位设置有关。
- 创建和删除文件,需要对当前目录具有写和执行权限。
- 为了open时指定O_TRUNC,必须对该文件具有写权限。
<span style="font-size:18px;">#include <unistd.h>
int access(const char *pathname, int mode);
</span>描述:测试文件访问权限,成功返回0,失败返回-1。mode取值包括RO_OK,W_OK,X_OK,F_OK。最后一个参数测试文件是否存在。
<span style="font-size:18px;">#include <sys/stat.h>
mode_t umask(mode_t cmask);</span>描述:设置与进程相关连的文件模式屏蔽字。成功返回以前的值。参数是访问权限位按位与构成的。
<span style="font-size:18px;">#include <sys/stat.h>
int chmod(const char *filename, mode_t mode);
int fchmod(int filedes, mode_t mode);</span>描述:改变文件权限模式。成功返回0,失败返回-1。使用要求进程UID==文件UID,或者该进程有超级用户权限。参数中的mode是S_ISUID,S_IRWXU,S_IRWXG等常量按位与构成的。
<span style="font-size:18px;">#include <unistd.h>
int chown(const char *pathname, uid_t owner, gid_t group);
int fchown(int filedes, uid_t owner, gid_t group);
int lchown(const char *pathname, uid_t owner, gid_t group);</span>描述:改变文件用户ID和组ID。三个函数成功返回0,失败返回-1。
3、truncate和ftruncate
<span style="font-size:18px;">#include <unistd.h>
int truncate(const char *pathname, off_t length);
int ftruncate(int filedes, off_t length);</span>描述:将现有文件截断为lenght个字节。二个函数成功返回0,失败返回-1。4、link和unlink
<span style="font-size:18px;">#include <unistd.h>
int link(const char *existingfilename, const char *newfilename);
int unlink(const char *filename);</span>描述:创建一个新的目录项,引用现有的文件existingfilename。成功返回0。失败返回-1。
#include <stdio.h>
int remove(const char *filename);
描述:删除文件或者目录。成功返回0。失败返回-1。
#include <unistd.h>
int symlink(const char *actualpath, const char *sympath);
ssize_t readlink(const char* restrict pathname, char *restrict buf, size_t bufsize);描述:创建一个指向actualpath的新目录项sympath,在创建此符号链接时,并不要求actualpath已经存在,且与sympth不需要在同一个文件系统中。成功返回0,失败返回-1。因为open函数跟随符号链接,所以用readlink打开文件本身。成功返回读到的字节数,失败返回-1.
6、目录访问
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);描述:创建时设置x执行位,以允许访问该目录的文件名。#include <unistd.h>
int rmdir(const char *pathname);描述:删除一个空目录。成功返回0,失败返回-1。
#include <dirent.h>
DIR *opendir(const char *pathname);
struct dirent *readdir(DIR *dp);
void rewinddir(DIR *dp);
int closedir(DIR *dp);
long telldir(DIR *dp);
void seekdir(DIR *dp, long loc);描述:打开,定位,读写目录。
#include <unistd.h>
char *getcwd(char *buf, size_t size);
int chdir(const char *pathname);
int fchdir(int filedes);描述:获得和改变当前目录。#include <unistd.h>
int chroot(const char *pathname);描述:改变根目录。7、设备特殊文件
系统中与每个文件名相关连的st_dev值是文件系统的设备号,该文件系统包含了这一文件名以及与其对应的i节点。
只有字符特殊文件和块特殊文件才有st_rdev值,此值包含实际设备的设备号。
本文详细介绍了APUE第四章的内容,涵盖了文件类型、文件访问权限、符号链接、目录操作及特殊文件等方面的知识,并提供了相关系统调用的使用方法。

252

被折叠的 条评论
为什么被折叠?



