网站大量收购独家精品文档,联系QQ:2885784924

Chapter4-文件系统:编写pwd.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
link 目标 创建一个文件的新链接 头文件 #includeunistd.h 函数原型 int result=link(const char *orig,const char *new); 参数 orig原始链接的名字 new新建链接的名字 返回值 -1 遇到错误 0 成功创建 (4)命令1n用来创建一个文件的链接,使用系统调用link: link生成一个i-节点的链接。新链接包含原始链接的i-节点号并从具有特定的名字,如果已经存在一个和新链接名相同的链接,则1ink将失败,1ink不能被用来生成目录的新链接 rename 目标 重命名或删除一个链接 头文件 #includeunistd.h 函数原型 int result=link(const char *from,const char *to); 参数 from原始链接的名字 to新建链接的名字 返回值 -1 遇到错误 0 成功返回 (5) 命令mv用来改变文件和目录的名字或位置,是这小节中所讲述的最为灵活的一个命令。在很多情况下仰mv仅仅使用系统调用rename rename用来改变文件或目录的名字或位置。例如,rename(“y”,”y.Old“)用来改变文件的名字,而rename(“y“,”c/d2/y.Old”)用来改变文件的名字和位置。rename适用于文件和目录,但是在进行目录移动时有些限制。例如,不能将一个目录移动到它的子目录中去。考虑一下rename(”demodir/c”,”demodir/d 2/c“)将会产生怎样的后果。和link不同,rename将删除第一个参数所指定的已存在的文件或空目录。 将文件移动到新的目录 文件实际上并不存在与目录中,目录中存放的仅仅是它的链接因此rename将链接从一个目录移动到另一个目录。 在linux内核,rename的基本逻辑是: 复制链接至新的名字/位置 删除原来的链接 chdir 目标 改变所调用进程的当前目录 头文件 #includeunistd.h 函数原型 int result=link(const char *path); 参数 path要到达的目录 返回值 -1 遇到错误 0 成功改变 (6)命令cd用来改变进程的当前目录。Cd对进程产生影响,但是并不影响目录。 cd使用系统调用chdir unix的每个运行程序都有一个当前日录,chdir系统调用改变进程的当前目录。在系统内部,进程有一个存放当前日录i-节点号的变量。从一个目录进入另一个目录只是改变那个变量的值。 命令pwd用来显示到达当前目录的路径。例如位于demodir/c/d2并且输入pwd,就可以看到 $ pwd /home/yourname/experiment/demodir/c/d2 pwd的工作过程:追踪链接,读取目录,一个目录接着一个目录的沿着树向上追踪,每步查看“.”的i-节点号,然后在父目录中查找i-节点的名字直到到达树的顶端。如图: 4.5 编写pwd 4.5.1 pwd的工作过程 #include stdio.h #include sys/types.h #include sys/stat.h #include dirent.h ino_t get_inode(char *); void printpathto(ino_t); void inum_to_name(ino_t , char *, int ); int main() { printpathto( get_inode( . ) ); putchar(\n); return 0; } vo

您可能关注的文档

文档评论(0)

0716 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档