Commit 0399b71c authored by karottc's avatar karottc

给fs/open.c文件增加注释-(3).

parent f8bc7b3f
......@@ -126,47 +126,70 @@ int sys_chdir(const char * filename)
return (0);
}
//// 改变根目录系统调用
// 把指定的目录名设置成当前进程的根目录'/'.
// 如果操作成功则返回0,否则返回出错码。
int sys_chroot(const char * filename)
{
struct m_inode * inode;
// 该调用用于改变当前进程任务结构中的根目录字段root,让其执行参数给定目录名
// 的i节点。如果目录名对应的i节点不存在,则返回出错码。如果该i节点不是目录i
// 节点,则放回该i节点,也返回出错码。
if (!(inode=namei(filename)))
return -ENOENT;
if (!S_ISDIR(inode->i_mode)) {
iput(inode);
return -ENOTDIR;
}
// 然后释放当前进程的根目录i节点,并重新设置为指定目录名的i节点,返回0。
iput(current->root);
current->root = inode;
return (0);
}
//// 修改文件属性系统调用
// 参数filename是文件名,mode是新的文件属性
// 若操作成功则返回0,否则返回出错码。
int sys_chmod(const char * filename,int mode)
{
struct m_inode * inode;
// 该调用为指定文件设置新的访问属性Mode。文件的访问属性在文件名对应的i节点
// 中,因此我们首先取文件名对应的i节点。如果i节点不存在,则返回出错码(文件或
// 目录不存在)。如果当前进程是有效用户id与文件i节点的用户id不同,并且也不是
// 超级用户,则放回该文件i节点,返回出错码(没有访问权限)。
if (!(inode=namei(filename)))
return -ENOENT;
if ((current->euid != inode->i_uid) && !suser()) {
iput(inode);
return -EACCES;
}
// 否则就重新设置该i节点的文件属性,并置该i节点的已修改标志。放回该i节点,返回0.
inode->i_mode = (mode & 07777) | (inode->i_mode & ~07777);
inode->i_dirt = 1;
iput(inode);
return 0;
}
///// 修改文件宿主系统调用
// 参数filename是文件名,uid是用户标识符(用户ID),gid是组ID。
// 若操作成功则返回0,否则返回出错码。
int sys_chown(const char * filename,int uid,int gid)
{
struct m_inode * inode;
// 该调用用于设置文件i节点中的用户和组ID,因此首先要取得给定文件名的i节点。
// 如果文件名的i节点不存在,则返回出错码(文件或目录不存在)。如果当前进程不
// 是超级用户,则放回该i节点,并返回出错码(没有访问权限)。
if (!(inode=namei(filename)))
return -ENOENT;
if (!suser()) {
iput(inode);
return -EACCES;
}
// 否则我们就用参数提供的值来设置文件i节点的用户ID和组ID,并置i节点已修改
// 标志,放回该节点,返回0.
inode->i_uid=uid;
inode->i_gid=gid;
inode->i_dirt=1;
......@@ -174,6 +197,14 @@ int sys_chown(const char * filename,int uid,int gid)
return 0;
}
//// 打开(或创建)文件系统调用。
// 参数filename是文件名,flag是打开文件标志,它可取值:O_RDONLY(只读)、O_WRONLY
// (只写)或O_RDWR(读写),以及O_EXCL(被创建文件必须不存在)、O_APPEND(在文件
// 尾添加数据)等其他一些标志的组合。如果本调用创建了一个新文件,则mode就用于指
// 定文件的许可属性。这些属性有S_IRWXU(文件宿主具有读、写和执行权限)、S_IRUSR
// (用户具有读文件权限)、S_IRWXG(组成员具有读、写和执行权限)等等。对于新创
// 建的文件,这些属性只应用与将来对文件的访问,创建了只读文件的打开调用也将返回
// 一个可读写的文件句柄。如果调用操作成功,则返回文件句柄(文件描述符),否则返回出错码。
int sys_open(const char * filename,int flag,int mode)
{
struct m_inode * inode;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment