1 / 10

实验 4 编写自己的 ls 命令

实验 4 编写自己的 ls 命令. 计算机学院 潘薇 panwei117@qq.com. 实验内容. 在 Linux 下编写一个 C 程序 myls 基本完成“ ls –l” 的功能 打印一个文件的信息的功能使用函数 showfile 进行封装. 问题 1 : ls –l 能做什么?. 遍历当前目录的所有文件 列出每一个文件的相关属性 权限模式 链接数 文件所有者 组 文件大小 最后修改时间 文件名. 问题 2 :遍历当前目录文件使用什么函数?. opendir(“.”) 打开当前目录 readdir 读取目录中的一项

bono
Download Presentation

实验 4 编写自己的 ls 命令

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实验4 编写自己的ls命令 计算机学院 潘薇 panwei117@qq.com

  2. 实验内容 • 在Linux下编写一个C程序myls • 基本完成“ls –l”的功能 • 打印一个文件的信息的功能使用函数showfile进行封装

  3. 问题1:ls –l能做什么? • 遍历当前目录的所有文件 • 列出每一个文件的相关属性 • 权限模式 • 链接数 • 文件所有者 • 组 • 文件大小 • 最后修改时间 • 文件名

  4. 问题2:遍历当前目录文件使用什么函数? • opendir(“.”)打开当前目录 • readdir读取目录中的一项 • closedir关闭打开的目录 • stat用于获取具体的文件信息

  5. 问题3:stat可以获取哪些文件属性? struct stat { mode_t st_mode; /* 文件模式*/ ino_t st_ino; /* 文件inode号 */ dev_t st_dev; /* 文件驻留的逻辑设备ID*/ dev_t st_rdev; /*设备的ID*/ nlink_t st_nlink; /*文件的链接数*/ uid_t st_uid; /*文件拥有者的用户ID*/ gid_t st_gid; /*文件拥有者组的ID*/ off_t st_size; /*文件逻辑长度*/ time_t st_atime; /*文件最后一次访问时间*/ time_t st_mtime; /*文件最后一次修改时间*/ time_t st_ctime; /*文件状态信息最后修改时间*/ long st_blksize; /*I/O预取块大小*/ long st_blocks; /*块预留数*/ }

  6. 问题4:st_mode的翻译? • 对使用stat函数返回的st_mode是一个16位的二进制数,可以使用宏定义进行翻译文件类型和权限,得到10个字符形式的属性 • S_ISDIR(st_mode) 该文件是否是目录 • S_ISCHR(st_mode) 该文件是否是字符设备 • S_ISBLK(st_mode) 该文件是否是块设备

  7. 问题4:st_mode的翻译? • st_mode & S_IRUSR为真,用户有读权限 • st_mode & S_IWUSR为真,用户有写权限 • st_mode & S_IXUSR为真,用户有执行权限 • st_mode & S_IRGRP为真,组用户有读权限 • st_mode & S_IWGRP为真,组用户有写权限 • st_mode & S_IXGRP为真,组用户有执行权限 • st_mode & S_IROTH为真,其他用户有读权限 • st_mode & S_IWOTH为真,其他用户有写权限 • st_mode & S_IXOTH为真,其他用户有执行权限

  8. 问题5:怎么翻译st_uid? • 使用函数struct passwd * getpwuid(st_uid)来进行翻译,请注意需要判断返回指针是否为空 • struct passwd{ • char *pw_name; //username • char *pw_passwd; //password • _uid_t pw_uid; //user id • _gid_t pw_gid; //group id • char *pw_gecos; //real name • char *pw_dir; //home directory • char *pw_shell; //shell program • }

  9. 问题6:怎么翻译st_gid? • 使用函数struct group * getgrgid(st_gid)来进行翻译,请注意需要判断返回指针是否为空 • struct group{ • char *gr_name; //group name • char *gr_passwd; //group password • gid_t gr_gid; //group id • char **gr_mem; //group members • }

  10. 问题7:时间翻译 • 使用ctime翻译st_mtime为字符串格式

More Related