【发布时间】:2016-08-21 19:31:36
【问题描述】:
我正在尝试熟悉修改 Minix 系统调用和重建内核。
我将mkdir 修改为每次调用时都打印New dir -> <directory-name> <permissions>,除非该目录已经存在。
我编辑了/usr/src/servers/vfs/open.c,其中包含mkdir 的代码。
我将这行代码添加到第 610 行:
printf("New dir -> %s %o",fullpath,dirmode);
通过此编辑,mkdir 打印正确,但如果文件夹已存在,我收到以下消息:
New Dir -> test 755 mkdir: test: file exists
我希望看到:
mkdir: test: file exists
我认为通过将 printf 添加到第 610 行附近的最后一个 if-else 主体,在这种情况下它不会执行,因为这个 if-else 结构检查新目录是否有效(inode、权限等),如果目录已经存在,调用应该返回。我错了。
我应该检查什么系统函数或变量来查看文件是否已经存在?
我使用的是 Minix 3.2.1 版。
为了测试这一点,我只重建了内核,如下所示:
cd /usr/src/releasetools
make hdboot
【问题讨论】:
-
我认为你应该检查
req_mkdir返回值,看看是否一切顺利。 -
您应该在注释掉 printf 的地方调用它,但以
req_mkdir的返回值为条件。
标签: c kernel system-calls mkdir minix