gnu coreutils rm.c 源码分析
2018-03-07 11:44
417 查看
先看main.c,
同样,先定义一个struct rm_options,用于存储命令选项,
先初始化 rm_option_init (&x);
接着,分析选项,向结构体赋值。
while ((c = getopt_long (argc, argv, "dfirvR", long_opts, NULL)) != -1)
{
switch (c)
{
case 0: /* Long option. */
break;
case 'd':
x.unlink_dirs = 1;
break;我不拷太多,看不清。
接着,进行关键
enum RM_status status = rm (n_files, file, &x);
注意,把要删除的文件全部放到数组file中了。上面有一句
*file = (char const *const *) argv + optind;
接着跑到rm中,
在rm (size_t n_files, char const *const *file, struct rm_options const *x)
中有如下一段:
for (i = 0; i < n_files; i++)
{
enum RM_status s = rm_1 (file[i], x, &cwd_state);
assert (VALID_STATUS (s));
UPDATE_STATUS (status, s);
}
那rm_1也不是删除呀,再找
status = remove_entry (filename, x, NULL);
再去找remove_entry,其中有一句:
DO_UNLINK (filename, x);
也就是,通过调用unlink来删除文件,因为目录中是
inode:文件名
把某个文件和某个inode不再关联,就删除了,先看大概吧
同样,先定义一个struct rm_options,用于存储命令选项,
先初始化 rm_option_init (&x);
接着,分析选项,向结构体赋值。
while ((c = getopt_long (argc, argv, "dfirvR", long_opts, NULL)) != -1)
{
switch (c)
{
case 0: /* Long option. */
break;
case 'd':
x.unlink_dirs = 1;
break;我不拷太多,看不清。
接着,进行关键
enum RM_status status = rm (n_files, file, &x);
注意,把要删除的文件全部放到数组file中了。上面有一句
*file = (char const *const *) argv + optind;
接着跑到rm中,
在rm (size_t n_files, char const *const *file, struct rm_options const *x)
中有如下一段:
for (i = 0; i < n_files; i++)
{
enum RM_status s = rm_1 (file[i], x, &cwd_state);
assert (VALID_STATUS (s));
UPDATE_STATUS (status, s);
}
那rm_1也不是删除呀,再找
status = remove_entry (filename, x, NULL);
再去找remove_entry,其中有一句:
DO_UNLINK (filename, x);
也就是,通过调用unlink来删除文件,因为目录中是
inode:文件名
把某个文件和某个inode不再关联,就删除了,先看大概吧
相关文章推荐
- gnu coreutils chgrp.c 源码分析
- gnu coreutils mkfifo.c源码分析
- gnu coreutils nice.c源码分析
- gnu coreutils mkdir.c源码分析
- gnu coreutils factor.c源码分析
- gnu coreutils echo.c 源码分析
- gnu coreutils tty.c源码分析
- gnu coreutils users.c源码分析
- gnu coreutils utime.c 源码分析
- gnu coreutils4.5.1 fold.c源码解读
- gnu coreutil源码分析nl.c
- gnu coreutils4.5.1 true.c源码解读
- gnu coreutils4.5.1 chroot .c源码解读
- gnu coreutils4.5.1 link.c源码解读
- gnu coreutils4.5.1 unlink.c源码解读
- jQuery 2.0.3 源码分析core - 选择器
- ROS 机器人源码分析之 self._launch_core_nodes() rosout/rosout
- spark 1.6.0 core源码分析5 spark提交框架
- 深入理解Spark 2.1 Core (二):DAG调度器的原理与源码分析
- gnu corenutils comm.c源码分析2