code:mknod - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- mknod 的系统调用,只能由超级用户调用
- 根据参数生成 INODE(一般是特殊INODE,如 设备装载INODE),详细参看UNIX手册
- 使用3个隐式参数
- name : 文件路径名(文件实体一般不存在,只用于生成INODE)
- mode : 设置为 INODE 模式位,模式常量参看inode.h
- addr : 设置为 INODE 的i_addr[0]位
5948
5949 /*
5950 * mknod system call
5951 */
5952 mknod()
5953 {
5954 register *ip;
5955 extern uchar;
5956
5957 if(suser()) {
5959 if(ip != NULL) {
- ip ← 根据 name 查找INODE
5960 u.u_error = EEXIST;
5961 goto out;
5962 }
5963 }
- 若 ip 已存在,抛出错误,释放ip
- 错误代码 : EEXIST
5964 if(u.u_error)
5965 return;
5966 ip = maknode(u.u_arg[1]);
5967 if (ip==NULL)
5968 return;
5969 ip->i_addr[0] = u.u_arg[2];
5970
5971 out:
5973 }
5974 /* ------------------------- */
5975
- (mknod = 14.; not in assembler)
- sys mknod; name; mode; addr