首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getcwd:使用符号链接

getcwd:使用符号链接
EN

Stack Overflow用户
提问于 2017-03-15 16:58:47
回答 1查看 561关注 0票数 0
代码语言:javascript
复制
int
main(void)
{
    char *ptr;
    size_t size;
    if (chdir("/usr/spool/uucppublic") < 0)
        err_sys("chdir failed");
    ptr = path_alloc(&size);
    /* our own function */
    if (getcwd(ptr, size) == NULL)
        err_sys("getcwd failed");
    printf("cwd = %s\n", ptr);
    exit(0);
}

$ ./a.out
cwd = /var/spool/uucppublic
$ ls -l /usr/spool
lrwxrwxrwx 1 root 12 Jan 31 07:57 /usr/spool -> ../var/spool

注意,chdir遵循符号链接(如我们所期望的,如图4.17所示),但是当它上升到目录树时,getcwd不知道它何时到达符号链接/usr/spool所指向的/var/spool目录。这是符号链接的一个特征。

以上都来自Rago和Stevens的“高级Unix编程”一书。

首先,chdir遵循符号链接,但是内核在进程的当前工作目录下存储什么?只有uucppublic

第二,作者想说些什么?

getcwd不知道何时命中/var/spool

据我所知,getcwd应该开始在文件夹uucppublic中读取inode of ..,以跳转到目录spool,其中包含父var,而不是usr。这就是为什么getcwd不应该关心是否存在象征性的问题。因为chdir遵循符号链接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-15 17:15:24

看起来你有这个想法,但你分析错了英语。

getcwd不知道它何时到达符号链接/usr/spool指向的/var/spool目录

“当它命中/var/spool目录时”是整个子句的修饰符:

getcwd不知道它被符号链接/usr/spool所指向。

在这句话中,"it“是”/var/spool目录“。就像这样读吧:

getcwd不知道符号链接/usr/spool指向/var/spool目录

你取出的片段:

getcwd不知道何时命中/var/spool

不是一个有意义的片段,因为它保留了修改的"when“子句,而删除了更重要的”the“子句,该子句是”没有概念“的对象。

顺便提一句,你是从一本老书开始工作的,所以你应该意识到事情已经发生了一些变化。getcwd现在是一个syscall (至少在Linux中),所以不再使用旧的算法(遍历..和搜索匹配的inode编号)。专用的syscall更快地提供了相同的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42816161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档