![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
认真做好这件小事
Sherlock_Holmes_lv
这个作者很懒,什么都没留下…
展开
-
pwd-find_dir_entry(pwd核心算法)
pwd源码分析就到这里了,学到了很多知识,更重要的是体会到了活在当下的喜悦,下一个是realpath的源码分析 自己实现的代码 static void find_dir_entry (struct stat* dot_sb, struct file_name* file_name, size_t parent_height) { /* get last dir stat info and prepend it's name to FILE_NAME */ DIR* dp; struct .原创 2021-11-06 17:56:58 · 379 阅读 · 0 评论 -
pwd-robust_getcwd
有现成的函数直接调!其根据有鲁棒性!起始写代码的大部分工作就是在给一个算法增加鲁棒性! 反思 1. 源码中调用的是get_root_dev_info struct dev_ino dev_ino_buf; struct dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf); 个人认为,有现成的函数调用还是用现成的,但是pwd的源码调用的库都在coreutils/lib中,我调不了,所以就使用了下面的方式。 2. get_root.原创 2021-11-04 17:35:15 · 156 阅读 · 0 评论 -
pwd-file_name_prepend
反思 1、计算中的+1 2、C语言中的const 3、数据的构造方式更加符合实际 文件的绝对路径是逐级往上走的,所以源码中采用了更加贴合实际的数据结构(指向文件名的指针是从尾往头走的)。 代码 /* prepend the n length of s before file_name, p. */ static void file_name_prepend (struct file_name* p, char const* s, size_t n) { size_t n_free = p->sta原创 2021-11-03 21:51:48 · 279 阅读 · 0 评论 -
pwd-init_filename, nth_parent
反思 Linux路径最大长度限制为4096字节,文件名为255字节 struct file_name* p = malloc (sizeof *p) 还可以这样赋值!!!我艹,另外sizeof可以不用加括号!!!sizeof *p表示指针所指位置的长度。 让用户输入尽可能简单!运算放入函数内计算 在nth_parent中,可以有两种传值方式,先计算好了3xn,另外就是只传n。显然后面这种对于用户和函数本身都是更加简单一些的方法。 nth_parent是输出是../../..的形式,不是/../..,也不是原创 2021-11-02 22:17:18 · 232 阅读 · 0 评论 -
pwd-xgetcwd
可能有些迷失在细节中,但是这就是我的性格 反思 xmalloc, xalloc_die,为什么要用这些呢? 这些方法对响应的函数(malloc…)进行了封装,对内存泄漏进行了检查。 xalloc_die中为什么error以后还要进行abort呢? 注解中是帮助编译器理解函数不返回任何值,但是不是特别理解。 foo(void)与foo()有什么区别? 加了void,C编辑器会认为函数没有参数,否则可以传任何类型的参数。 代码 void xalloc_die (void) { error (1, 0.原创 2021-11-01 21:36:49 · 609 阅读 · 0 评论 -
Linux-pwd命令--logical_getcwd
好好活就是做有意义的事,做有意义的事就是好好活。 反思: 1、为什么这里不用正则表达式? 我认为C语言的表达式过于复杂了,即使有库可以直接调。这里不用正则表达式反而整个代码更加简洁! 2、为什么这里要检查"/.", “/./”, “/…”, "/…/"这几种情况? 我发现stat函数会漠视这几种情况,即"/home/test/." == “/home/test”,这也符合Linux的文件系统规则。 重新实现: static char* logical_getcwd() { struct stat s.原创 2021-10-31 20:47:17 · 123 阅读 · 0 评论