`
xitonga
  • 浏览: 616007 次
文章分类
社区版块
存档分类
最新评论

Linux/UNIX之文件和目录(2)

 
阅读更多

文件和目录(2)

link、ulink、remove和rename函数

#include <unistd.h>

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

int unlink(const char *pathname);

#include <stdio.h>

int remove(const char *pathname);

int rename(const char *oldpath, const char*newpath);

link函数用于创建一个指向现有文件的硬链接。

unlink函数用于删除一个现有的目录项。如果一个文件的链接数减少到0,并且没有进程打开它,这个文件就被删除。实际情况是,目录项总是被先删除,但文件所占用的孔家要等到最后一个进程关闭它之后才会被系统回收。

remove函数可以解除对一个文件或目录的链接。对于文件,其功能与unlink相同;对于目录,其功能与rmdir相同。

rename更改文件或目录的名字。

符号链接

符号链接又称为链接,是指向文件的间接指针。引入符号链接的原因是为了避免硬链接的一些限制:

1.硬链接通常要求链接和文件位于同一问价系统中

2.只有超级用于才能创建指向目录的硬链接

当引用以名字引用文件的函数时,应当了解该函数是否跟随链接到达它所链接的文件。

以下是硬链接和符号链接之间的区别:

硬链接:只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。

符号链接:是一个指针,指向文件在文件系统中的位置。符号链接可以跨文件系统,甚至可以指向远程文件系统中的文件。符号链接只是指明了原始文件的位置,用户需要对原始文件的位置有访问权限才可以使用链接。如果原始文件被删除,所有指向它的符号链接也就都被破坏了。它们会指向文件系统中并不存在的一个位置。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建符号链接。

符号链接与硬链接有什么区别?

简单的说:硬连接记录的是目标的 inode,符号连接记录的是目标的 path。

symlink和readlink函数

#include <unistd.h>

int symlink(const char *oldpath, const char*newpath);

ssize_t readlink(const char *path, char*buf, size_t bufsiz);

symlink创建一个符号链接。该函数创建一个指向oldpath的新目录项newpath,在创建符号连接时,并不要求oldpath已经存在。并且oldpath和newpath并不需要位于同一文件系统中。

因为open函数跟随符号链接,所以需要一种方法打开该链接本身,并读该链接中的名字。readlink提供这种功能。此函数成功执行,返回读到的字节数,在buf中返回符号的内容不以null字符终止。综合了open、read和close的所有操作。

文件的时间

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

st_atime 文件数据的最后访问时间

st_mtime 文件数据的最后修改时间

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

修改时间和更改状态时间之间的区别:修改时间时文件内容最后一次被修改的时间。更改状态时间是该文件的i节点最后一次被修改的时间。系统不保存对i节点的最后一次访问时间,所以access和stat等函数并不更改这三个时间中的任何一个。

ls命令按这三个时间值中的一个排序进行显示。按系统默认按文件的修改时间先后排序,-u选项使其按访问时间顺序排序,-c选项使其按更改状态时间排序。

utime函数

#include <sys/types.h>

#include <utime.h>

int utime(const char *filename, const structutimbuf *times);

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

The utimbuf structure is:

struct utimbuf {

time_t actime; /* access time */

time_t modtime; /* modification time */

};

mkdir和rmdir函数

#include <sys/stat.h>

#include <sys/types.h>

int mkdir(const char *pathname, mode_tmode);

mkdir用于创建一个新的空目录,所指定的文件访问权限mode有进程的文件模式创建屏蔽字修改。

#include <unistd.h>

int rmdir(const char *pathname);

rmdir删除一个空目录。

读目录

#include <sys/types.h>

#include <dirent.h>

DIR *opendir(const char *name);

opendir打开一个目录并建立一个目录流,成功返回DIR指针的结构指针,该指针用于读取目录数据项,失败返回空指针。

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

该函数返回一个指针,指针指向的结构里保存着目录流dirp中的下一个目录项的有关资料。后序的readdir调用将返回后序的目录项。调用失败返货NULL。

struct dirent结构包含的目录数据项内容包括以下部分:

ino_t d_ino: 文件的inode节点号

char d_name[]: 文件的名字

#include <sys/types.h>

#include <dirent.h>

int close(int fd);

该函数关闭一个目录流并释放与之关联的资源。成功返回0,失败返回-1。

include <dirent.h>

long telldir(DIR *dirp);

该函数的返回值记录一个目录流里的当前位置。

#include <dirent.h>

void seekdir(DIR *dirp, long offset);

该函数设置目录流dirp的目录项指针。

DIR结构是一个内部结构,上述函数用这个内部结构保存当前正被读的目录的有信息。

chdir、fchdir和getcwd函数

#include <unistd.h>

int chdir(const char *path);

int fchdir(int fd);

程序可以像用户在文件系统里漫游那样来游览目录。就像我们在shell里使用cd命令来切换目录一样,在程序里则可以使用chdir或fchdir系统调用。

#include <unistd.h>

char *getcwd(char *buf, size_t size);

getcwd函数把当前目录的名字写到给定缓冲区buf里。如果目录的名字超出了参数size给出的缓冲区长度,它就返回NULL。如果成功,它返回指针buf。

分享到:
评论

相关推荐

    Linux/UNIX系统编程手册源码

    1. **UNIX/Linux系统接口**:在UNIX和Linux系统中,程序员通常通过系统调用来与操作系统进行通信。这些调用包括打开、关闭文件,读写数据,创建和管理进程,以及处理网络通信等。例如,`open()`用于打开文件,`read...

    Linux/UNIX系统编程手册课后习题代码

    《Linux/UNIX系统编程手册》是一本经典的教材,它深入浅出地介绍了Linux和UNIX操作系统下的编程接口。这本书涵盖了各种核心API,包括文件操作、进程管理、网络通信、信号处理等,是学习系统级编程的重要参考资料。...

    Linux/UNIX系统编程手册(源代码)

    文件和目录的权限控制是系统安全的基础。`chmod`、`chown`和`chgrp`用于改变文件权限和所有权,`setuid`和`setgid`用于运行程序时改变进程的用户和组ID,实现特权操作。 通过《Linux/UNIX系统编程手册》的源代码...

    linux/unix系统编程手册附录代码

    《Linux/Unix系统编程手册》是一本深受程序员和系统管理员喜爱的经典著作,它详细阐述了在Linux和Unix操作系统上进行低级编程的各种技术。附录中的代码是书中的实例,旨在帮助读者深入理解和掌握这些系统编程的核心...

    linux/unix系统编程手册(下)

    《Linux/Unix系统编程手册(下)》是深入理解Linux和Unix操作系统内核与系统编程不可或缺的参考书籍。这本书详细阐述了在这些操作系统环境下进行程序设计、系统调用、网络编程以及文件操作等方面的关键概念和技术。 ...

    用Linux/UNIX Shell编程语言设计系统监控程序.pdf

    本文档提供了使用Linux/UNIX Shell编程语言设计系统监控程序的方法和技术,实践中可以根据需要进行修改和调整,以满足不同的应用要求。同时,文档也对CFB锅炉的应用和环境保护的重要性进行了简要介绍,强调了环保和...

    Linux-UNIX系统编程手册.pdf

    从手册的目录结构和内容安排来看,它旨在对Linux/UNIX系统编程提供全方位的指导。每个章节都紧密结合实际的编程示例和详尽的解释,这不仅有助于加深理解,还能够指导开发者在实际工作中应用所学知识。 总结来说,这...

    Linux/Unix系统自学教程

    在IT领域,Linux和Unix系统是两种非常重要的操作系统,尤其在服务器端和开发环境中广泛应用。这份"Linux/Unix系统自学教程"将引导你逐步掌握这两种强大的操作系统的核心概念和实用技能。 首先,我们要明白Linux和...

    linux/unix 系统编程手册

    《Linux/Unix 系统编程手册》是一本深入探讨Linux和Unix系统编程的权威著作,由德国专家Michael Kerrisk撰写,并由孙剑等翻译成中文,由人民邮电出版社出版。这本书涵盖了广泛的系统编程主题,旨在帮助开发者理解和...

    Linux/UNIX系统编程手册 源码

    《Linux/UNIX系统编程手册》是一本深受程序员和系统管理员喜爱的经典著作,它详细阐述了在Linux和UNIX操作系统上进行系统级编程的各种技术。源码是书籍内容的实践部分,对于学习和理解书中的概念至关重要。这个...

    asm.zip_Linux/Unix编程

    【标题】"asm.zip_Linux/Unix编程" 文件包涵盖了多个与Linux/Unix系统相关的编程主题,特别是关于URI(统一资源标识符)和UriBuilder类的使用。在Linux和Unix环境中,开发人员经常需要处理这些类来构建和操作URLs,...

    RSGLXT-master_Linux/Unix编程_

    Linux/Unix的文件系统强大而灵活,支持文件权限管理,这对于敏感的员工档案信息至关重要。开发者可能利用数据库管理系统(如MySQL、PostgreSQL)存储和检索员工信息,确保数据的安全性和一致性。同时,通过shell脚本...

    LINUX.UNIX系统编程手册(下册)

    linux编程资深专家michael kerrisk在书中详细描述了linux/unix系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。《linux/unix系统编程手册(上、下册)》涵盖了逾500个系统调用及库函数,并给出逾200...

    Linux/UNIX系统编程手册.part2

    Linux编程资深专家Michael Kerrisk在书中详细描述了Linux/UNIX系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。《Linux/UNIX系统编程手册(上、下册)》涵盖了逾500个系统调用及库函数,并给出逾200...

    XMS.rar_Linux/Unix编程

    Linux/Unix编程涉及理解这些系统的API(应用程序编程接口)、Shell脚本、进程管理、文件系统操作、网络编程以及多线程等概念。 【压缩包子文件的文件名列表】揭示了项目的组成部分: 1. `Test.bdsproj` - 这是...

    Linux/UNIX系统编程手册.part1

    Linux编程资深专家Michael Kerrisk在书中详细描述了Linux/UNIX系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。《Linux/UNIX系统编程手册(上、下册)》涵盖了逾500个系统调用及库函数,并给出逾200...

    exercise_one_due2v3_Linux/Unix编程_

    【标签】"due2v3 Linux/Unix编程"进一步确认了主题,强调了这与Linux和Unix操作系统的编程实践有关,可能是涉及系统调用、shell脚本、进程管理、文件I/O、网络编程等相关领域。 【压缩包子文件的文件名称列表】只给...

    Linux/UNIX系统编程手册 上册

    linux编程资深专家michael kerrisk在书中详细描述了linux/unix系统编程所涉及的系统调用和库函数,并辅之以全面而清晰的代码示例。《linux/unix系统编程手册(上、下册)》涵盖了逾500个系统调用及库函数,并给出逾200...

    IQWG.zip_Linux/Unix编程

    尽管它们是Windows开发环境下的文件格式,但通过 Mono 工具链,可以在Linux/Unix系统上编译和运行这些.NET应用。 1. **C#编程**:8ContactEditor.cs和0ContactSelector.cs是C#源代码文件,它们包含了具体的业务逻辑...

    lrkx.rar_Linux/Unix编程

    在Linux和Unix系统中,编程通常涉及C、C++、Perl、Python或Shell脚本等语言。这些操作系统提供了丰富的命令行工具和API,用于处理系统级任务,如网络通信、进程管理、文件操作等。电话通信的实现可能涉及到以下几个...

Global site tag (gtag.js) - Google Analytics