【xv6学习之HW1】shell

第一次的作业就把我难倒了。在此十分感谢JasonLeaster,没有这一系列的博文,我可能就要放弃了。希望能坚持下去,虽然比较难,但是我肯定能学到很多东西。

传送在此:http://blog.csdn.net/cinmyheart/article/details/45122619

不会的东西比较多,记录的东西也就比较多,比较杂。记下来先,慢慢熟悉。


看了JasonLeaster写的代码,差不多能理解个大概,也就真的是大概了。。

1、stat()函数与access()函数:获取文件信息。(参考的Jason的源代码,他使用了access()函数判断权限值,在我的代码里,删掉了此部分)

stat既有命令也有同名函数,用来获取文件Inode里主要信息(即文件类型、文件权限、创建/修改/访问时间等)。

struct stat  
{  
    dev_t       st_dev;     /* ID of device containing file -文件所在设备的ID*/  
    ino_t       st_ino;     /* inode number -inode节点号*/
    mode_t      st_mode;    /* 文件的类型和存取的权限*/  
    nlink_t     st_nlink;   /* number of hard links -链向此文件的连接数(硬连接)*/  
    uid_t       st_uid;     /* user ID of owner -user id*/  
    gid_t       st_gid;     /* group ID of owner - group id*/  
    dev_t       st_rdev;    /* device ID (if special file) -设备号,针对设备文件*/  
    off_t       st_size;    /* total size, in bytes -文件大小,字节为单位*/  
    blksize_t   st_blksize; /* blocksize for filesystem I/O -系统块的大小*/  
    blkcnt_t    st_blocks;  /* number of blocks allocated -文件所占块数*/  
    time_t      st_atime;   /* time of last access -最近存取时间*/  
    time_t      st_mtime;   /* time of last modification -最近修改时间*/  
    time_t      st_ctime;   /* time of last status change - */  
};  

其中, st_mode该成员描述了文件的类型权限两个属性。

st_mode是个32位的整型变量,不过现在的linux操作系统只用了低16位。特征位的定义如下:


<sys/stat.h>头文件定义如下:

#define S_IFMT     00170000     文件类型的位遮罩
#define S_IFSOCK    0140000     socket
#define S_IFLNK     0120000     符号链接(symbolic link)
#define S_IFREG     0100000     一般文件
#define S_IFBLK     0060000     区块设备(block device)
#define S_IFDIR     0040000     目录
#define S_IFCHR     0020000     字符设备(character device)
#define S_IFIFO     0010000     先进先出(fifo)
#define S_ISUID     0004000     文件的(set user-id on execution)位
#define S_ISGID     0002000     文件的(set group-id on execution)位
#define S_ISVTX     0001000     文件的sticky位


#define S_IRWXU     00700       文件所有者的遮罩值(即所有权限值)
#define S_IRUSR     00400       文件所有者具可读取权限
#define S_IWUSR     00200       文件所有者具可写入权限
#define S_IXUSR     00100       文件所有者具可执行权限
#define S_IRWXG     00070       用户组的遮罩值(即所有权限值)
#define S_IRGRP     00040       用户组具可读取权限
#define S_IWGRP     00020       用户组具可写入权限
#define S_IXGRP     00010       用户组具可执行权限
#define S_IRWXO     00007       其他用户的遮罩值(即所有权限值)
#define S_IROTH     00004       其他用户具可读取权限
#define S_IWOTH     00002       其他用户具可写入权限
#define S_IXOTH     00001       其他用户具可执行权限


#define S_ISLNK(m)      (((m) & S_IFMT) == S_IFLNK)  
#define S_ISREG(m)      (((m) & S_IFMT) == S_IFREG)  
#define S_ISDIR(m)      (((m) & S_
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值