APUE ---文件和目录2

网友投稿 557 2022-09-23

APUE ---文件和目录2

APUE ---文件和目录2

13、link, unlink , remove和rename函数

int link(const char *pathname, const char *newpath);

任何一个文件可以有多个目录项指向其i节点。此函数创建一个新目录项,它引用现有的文件,如果newpath已经存在,则出错。

注意:只创建newpath的最后一个分量,路径中的其他部分也应当存在。

int unlink(const char *pathname);

成功返回0,失败返回-1.

此函数删除目录项,并将由pathname所引用文件的链接数减 1,如果还有指向该文件的其他链接,则仍可以通过其他链接访问该文件的数据。如果出错,则不对该文件做任何更改。为了解除对该问价的链接,必须对包含该目录项的目录具有写和执行权限。

int remove(const char *pathname);

对于文件,此函数的功能和unlink相同。对于目录,与rmdir相同。

int rename(const char *oldname, const char *newname);

此函数更改文件或目录的名字,成功返回0,失败返回-1.

注意:

(1)如果oldname指的是一个文件而不是目录,则为该文件或符号链接更名。这时,如果newname已经存在但它是一个目录则出错,如果他不是目录,则将该目录项删除,然后将oldname改为newname。

(2)如果oldname指的是一个目录,如果newname已经存在,那么它必须引用一个目录并且要是空目录。如果newname已经存在并是一个空目录,则把该目录删除,然后oldname改为newname。另外当为一个目录更名时,newname不能包含newname作为其路径前缀。例如不能将/usr/foo更名为/usr/foo/testdir。

(3)如若oldname或newname引用符号链接,则处理的是符号链接本身。

(4)作为一个特例,如果oldname和newname引用同一文件,则函数不做任何更改成功返回。

14、符号链接

符号链接是指向一个文件的间接指针,硬链接是直接指向文件的i节点。符号链接以及它指向何种对象,并无任何文件系统限制。

注意:当使以名字引用文件的函数时,应当了解函数是否处理符号链接。使用符号链接可能是文件系统中引入循环

15、symlink和readlink函数

symlink函数创建一个符号链接

int symlink(const char *actualpath, const char *sympath);

此函数创建一个指向ctualpath的新目录项sympath,在创建符号链接时,并不要求ctualpath已经存在。

ssize_t readlink(const char *restrict pathname, char *restrict buf);

这个函数组合了 open,read,close的所有操作。

16、文件时间

对每个文件保持有三个时间字段

字段

说明

例子

st_atime

文件数据的最后访问时间

read

st_mtime

文件数据的最后修改时间

write

st_ctime

i节点状态的最后更改时间

chmod, chown

注意:修改时间和更改状态时间之间的区别。

修改时间是文件内容的最后一次修改

更改状态时间是i节点最后一次被修改的时间。

17、utime函数

一个文件的访问和修改时间可以用utime函数更改

#include

int utime(const char *pathname, const struct utime *times);

struct utime{

time_t actime;

time_t modtime

}

18、mkdir和rmdir函数

用mkdir函数创建目录,用rmdir函数删除目录

int mkdir(const char *pathname, mode_t mode);

int rmdir(const char *pathname)

注意:i节点的链接数为0时才被释放。

19、读目录

#include

DIR *opendir(const char *path);/*成功,返回指针*/

struct dirent *readdir(DIR *dp);

void rewinddir(DIR *dp);

int closedir(DIR*dp);

long telldir(DIR *dp);

void seekdir(DIR *dp, long loc);

struct dirent{

ino_t d_ino;

char d_name[NAME_MAX + 1];

}

20、chdir,fchdir,getcwd函数

通过调用chdir和fchdir可以改变当前的工作目录。

int chdir(const char *pathname);

int fchdir(int filedes);

因为当前工作目录是进程的一个属性,所以他只影响调用chdir的进程本身,而不影响其他进程。

char *getdwd(char *buf, size_t size);成功,返回buf,出错返回NULL

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:linux的几种设备驱动的数据结构和驱动注册之块设备_hantown-ChinaUnix博客
下一篇:学Python,从列表推导到zip()函数,这五种技巧应知应会(zip函数Python)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~