1. unix 比较重要的设备文件:
/dev/console :这个设备代表的时系统控制台。错误信息和诊断信息通常会被发送到这个设备。
/dev/tty:控制终端的别名
/dev/null:空设备,相当于回收站
2.文件描述符:
标准输入:0 (STDIN_FILENO)
标准输出:1(STDOUT_FILENO)
标准错误:2(STDOUT_FILENO)
括号中的变量定义在 unistd.h 头文件中
3.write系统调用
#include<unistd.h>
size_t write(int fildes, const void *buf, size_t nbytes);
把缓冲区 buf 的前 nbytes 个字节写入与文件描述符 fildes 关联的文件中
返回实际写入的字节数,若返回0,表示未写入任何数据,写入出错返回 -1,错误代码在 erron 中。
4.read系统调用
#include<unistd.h>
size_t read(int fildes, void *buf, size_t nbytes);
从与文件描述符 fildes 相关联的文件里读入 nbytes 哥字节数据 并放入数据区 buf 中。
返回实际读入的字节数,若返回0,表示未读入任何数据,已达到文件尾,读入出错返回 -1,错误代码在 error 中。
5.open系统调用
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);
(POSIX规范的系统中并不需要包含 sys/types.h 和 sys/stat.h 头文件,但有些系统需要)
建立文件或设备的访问路径,调用成功返回文件描述符,失败返回 -1。
oflags 参数用于指定打开文件所采取的动作:
必需文件访问模式: O_RDONLY:只读打开
O_WRONLY:只写打开
O_RDWR :读写打开
可选模式(按位或):
O_APPEND:把写入的数据追加至文件尾
O_TRUNC :把文件长度设置为0,丢弃已有的内容
O_CREAT :如果需要,按参数 mode 中给出的访问模式创建文件
O_EXCL :与O_CREAT一起使用,确保调用者创建出文件
使用带有 O_CREAT标志创建文件时的mode参数:(按位或)(定义在sys/stat.h中)
S_I + R/W/X +USR/GRP/OTH :读/写/执行,文件属主/文件所属组/其他用户(如:s_IUSR:读权限,文件属主)
注:open 调用里给出的mode值将与用户掩码(umask)的反值做AND操作,决定最终的文件访问权限
umask:三个八进制组成
如:禁止组的写和执行权限,同时禁止其他用户的写权限:umask值 为:
0 (此位代表属主)
3(此位代表所属组)( 为:2 | 1)
2(此位代表其他用户)
(以上的每位数的值为 :(0允许任何权限,4禁止读,2禁止写,1禁止执行)三者取值相OR)
6.close系统调用
#include<unistd.h>
int close(int fildes)
终止文件描述符 fildes 与其对应文件之间的关联,成功返回0,失败返回 -1。
7.ioctl系统调用
#include<unistd.h>
int ioctl(int fildes, int cmd, ...)
提供一个用于控制设备及其描述符行为和配置底层服务的链接口
ioctl对描述符 fildes 引用的对象执行 cmd 参数中给出的操作。
8.lseek系统调用
#include<unistd.h>
#include<sys/types.h>
off_t lseek(int fildes, off_t offset, int whence);
对文件描述符 fildes 的读写指针进行设置,设置为whence方式的 offset个字节偏移
whence参数值:SEEK_SET:绝对偏移
SEEK_CUR:相对于当前位置偏移
SEEK_END:相对于文件尾偏移
lseek 返回从头文件到文件指针被设置处的字节偏移值,失败返回 -1
9.fstat,stat 和 lstat 系统调用
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>(可选,推荐)
int fstat(int fildes, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
fstat 返回与打开的文件描述符相关的文件的状态信息,写入 buf 结构中
stat 和 lstat 返回的是通过文件名查到的状态信息,他们返回相同结果,但文件是一个符号链接时,lstat 返回链接本身信息,stat 返回 链接指向的文件信息
stat结构成员一般内容:
stat结构中返回的 st_mode标志还有一些与之关联的宏,他们定义在头文件 sys/stat.h 中,
这些宏包括对访问权限,文件类型标志以及一些用于帮助测试特定类型和权限的掩码的定义。文件标志如下:
10.dup 和 dup2系统调用
#include<unistd.h>
int dup(int fildes);
int dup2(int fildes, int fildes2);
dup系统调用提供了一种复制文件描述符的方法,复制文件符 fildes,返回一个新的文件描述符。
dup2 系统调用鸟哥通过明确指定目标描述符来把一个文件描述符复制给另外一个。
11.chmod系统调用
#include<sys/stat.h>
int chmod(const char *path, mode_t mode);
chmod用来改变文件或目录的访问权限,path参数指定的文件被修改为具有 mode参数(与open中的一样)给出的访问权限。
12.chown系统调用
#include<sys/types.h>
#include<unistd.h>
int chown(const char *path, uid_t owner, gid_t group);
chown用来改变一个文件的属主,调用使用的时用户ID和组ID的数字值(通过getuid和getgid调用获得)和一个用于限定谁可以修改文件属主的系统值。
13.unlink,link 和 symlink 系统调用
#include<unistd.h>
int unlink(const char *path);
int link(const char *path1, const char *path2);
int symlink(const char *path1, const char *path2);
unlink删除一个文件的目录项并减少它的链接数,成功返回 0,失败返回 -1,若想删除文件(文件链接减少到0)需要有所属目录写和执行权限。
link将创建一个指向已有文件 path1的新链接path2.通过symlink 以类似的方式创建符号链接。
14.mkdir 和 rmdir 系统调用
#include<sys/types.h>
#include<sys/stat.h>
int mkdir(const char *path, mode_t mode);
创建目录,目录名path,权限mode设定
#include<unistd.h>
int rmdir(const char *path);
删除目录(目录必须为空)
15.chdir 系统调用和 getcwd 函数
#include<unistd.h>
int chdir(const char *path);
切换目录(相当于shell中的cd)
#include<unistd.h>
char *getcwd(char *buf, size_t size);
getcwd 函数把当前目录的名字写到给定的缓冲区 buf中,目录长度超出给定的 size就返回 NULL,如果成功返回 指针 buf
16. opendir函数
#include<sys/types.h>
#include<dirent.h>
DIR *opendir(const char *name);
打开一个目录,并建立一个目录流,成功返回一个指向DIR结构的指针,用于读取目录数据项,失败返回空指针。
17. readdir函数
#include<sys/types.h>
#include<dirent.h>
struct dirent *readdir(DIR *dirp);
返回一个指针,该指针指向的结构里保存着目录流 dirp 中的下一个目录项的有关资料,后续的 readdir 调用将返回后续的目录项。
如果发生错误或达到目录尾,返回NULL。
dirent结构包含的目录项内容: ino_t d_ino:文件的inode节点号,char d_name[] :文件的名字
18.telldir函数
#include<sys/types.h>
#include<dirent.h>
long int telldir(DIR *dirp);
返回值记录着一个目录流里的当前位置
19.seekdir函数
#include<sys/types.h>
#include<dirent.h>
void seekdir(DIR *dirp, long int loc);
设置目录流 dirp 的目录指针项,loc的值用来设置指针位置,它通过 telldir 函数调用获得
20.closedir函数
#include<sys/types.h>
#include<dirent.h>
int closedir(DIR *dirp);
关闭已恶搞目录流并释放与之关联的资源,成功返回0,错误返回 -1