chdir函数的功能类似于cd命令,用于更改当前工作目录。
mkdir 函数主要用于创建文件目录。创建目录的权限是由(mode & ~ umask & 0777)来指定的。umask是默认权限,也称为剥夺权限。对于Linux系统而言,新创建的目录owner是进程的有效用户id。对于目录的组id而言,如果目录中的文件已经设定了组id,新目录将从父目录中继承目录的组owner,否则组id将是进程的有效组id。
rmdir函数用于删除指定目录。
在操作系统中,文件是一切数据的存在形式。文件是数据的集合,文件系统中不仅仅包含文件系统的结构,还包含着文件中的数据。在Linux系统中,实现文件的存储和相关信息保存的核心是索引节点(inode)结构。每个inode中存储有文件的属性、访问权限以及文件数据块的位置。对于Linux系统而言,inode是文件系统定位文件的基本途径。inode如下图所示,前面的4项可以统称为文件的描述信息,其他的信息均为定位文件数据的指针。
Mode:包含有inode的描述内容和用户的访问权限。
Owner Information:文件或目录所有者的信息,包括所属组信息。
Size:用于记录文件的大小,以字节为单位。
Timestamps:时间戳,用于记录inode的创建时间及最后的修改时间。
定位文件数据的指针主要包括:直接块指针、间接块指针、双重间接块指针和三重间接块指针。inode包含有15个块指针的数组,每个块指针都是32位,用于指向文件所在的数据块位置,文件所占用的数据块都将记录在该数组中。
要对某个文件是实现读写,首先应该打开该文件,获得一种被称为文件指针的句柄,然后通过句柄完成对文件的读写操作。Linux为了统一对文件和设备的操作,提供了open、read、close等操作函数,使用文件描述符来实现对文件的操作。文件描述符为一整数。一个进程打开了一个文件,通过fork产生的当前进程的子进程将会继承父进程的环境和上下文中的大部分内容,其中包括打开的文件描述符信息。也就是说,如果父进程在创建子进程前打开了某文件,父子进程将享有相同的文件偏移量。
inode中存在名为Mode的数据单元,其中包含有文件的访问权限信息、相关的文件信息和文件所有者的信息。inode使用了16位字段来记录文件的相关属性,其中的0~8位为相关用户权限,如图所示:
即使没有对该文件的读取权限,任然可以获得文件信息。对于stat函数和lstat函数,如果是要获得处于某个目录下的文件信息,则要求对该文件所处的所有上级目录有相应的进入权限,即对该目录要具有可执行权限。
stat函数通过指向所处路径的指针获得相关文件的信息并将该文件信息写入函数的第二个参数,该参数是指向stat结构体的指针。
lstat函数与stat函数功能几乎完全相同。如果给出的文件或目录所处路劲是一个符号链接,获得的是该符号链接信息。
fstat函数与stat函数相同,只是调用的第一个参数是文件描述符。