20165223 《信息安全系统设计基础》 stat命令的实现-mysate
Posted moddy13162201
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20165223 《信息安全系统设计基础》 stat命令的实现-mysate相关的知识,希望对你有一定的参考价值。
学习使用stat(1),并用C语言实现
???????????????1. 提交学习 stat(1) 的截图
???????????????2. man -k ,grep -r的使用
???????????????3. 编写mystate.c的伪代码
???????????????4. 产品代码 mystate.c,提交码云链接
???????????????5. 测试代码,mystat 与 stat(1) 对比,提交截图
一、学习 stat 命令
1. stat 命令了解
- 作用:用来显示文件的详细信息,包括inode, atime, mtime, ctime
- 格式:stat [OPTION]…FILE…
2. stat 命令格式
- -L:显示符号链接
- -f:显示文件所在的文件系统信息
- -t:以简洁的方式输出摘要信息
3. stat 命令使用实例
- 查看文件的详细信息:stat /文件目录
- 查看文件系统的详细信息:stat -f /文件目录
- -t查看简洁输出(脚本中常用来获取想要的信息):stat -t /文件目录
- 八进制文件权限(shell脚本时会用到):stat -c "%a" /文件目录
- 查看硬盘的信息:stat /dev/sda
4. stat 输出内容
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据块总数
- IO Block:IO块大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid
5. Linux下的三个时间
- Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
- Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
- Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数等
二、实现 mystat
1. 提交学习 stat(1) 的截图
- 使用命令 man 1 stat 查看
2. man -k ,grep -r的使用
- 使用 man -k stat | grep 2 查找stat相关函数
- 使用 man 2 stat 学习函数
3. 编写mystate.c的伪代码
4. 产品代码 mystate.c,提交码云链接
- 产品代码(有参考) mystat.c
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Usage: %s <pathname>
", argv[0]);
exit(EXIT_FAILURE);
}
if (stat(argv[1], &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
printf("File type: ");
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block device
");
break;
case S_IFCHR: printf("character device
");
break;
case S_IFDIR: printf("directory
");
break;
case S_IFIFO: printf("FIFO/pipe
");
break;
case S_IFLNK: printf("symlink
");
break;
case S_IFREG: printf("regular file
");
break;
case S_IFSOCK: printf("socket
");
break;
default: printf("unknown?
");
break;
}
printf("I-node number: %ld
", (long) sb.st_ino);
printf("Mode: %lo (octal)
",(unsigned long) sb.st_mode);
printf("Link count: %ld
", (long) sb.st_nlink);
printf("Ownership: UID=%ld GID=%ld
",(long) sb.st_uid, (long) sb.st_gid);
printf("Preferred I/O block size: %ld bytes
",(long) sb.st_blksize);
printf("File size: %lld bytes
",(long long) sb.st_size);
printf("Blocks allocated: %lld
",(long long) sb.st_blocks);
printf("Last status change: %s", ctime(&sb.st_ctime));
printf("Last file access: %s", ctime(&sb.st_atime));
printf("Last file modification: %s", ctime(&sb.st_mtime));
exit(EXIT_SUCCESS);
}
- 编译运行 mystat
5. 测试代码,mystat 与 stat(1) 对比,提交截图
程序运行
???????????????????1. 理解test.c, 说出程序功能
???????????????????2. 编译运行程序,提交运行截图
1. 理解test.c, 说出程序功能
- 代码 test.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int fd ;
int newfd;
char line[100];
fgets( line, 100, stdin ); printf("%s", line );
fgets( line, 100, stdin ); printf("%s", line );
fgets( line, 100, stdin ); printf("%s", line );
fd = open("data", O_RDONLY);
newfd = dup2(fd,0);
if ( newfd != 0 ){
fprintf(stderr,"Could not duplicate fd to 0
");
exit(1);
}
close(fd);
fgets( line, 100, stdin ); printf("%s", line );
fgets( line, 100, stdin ); printf("%s", line );
fgets( line, 100, stdin ); printf("%s", line );
}
- 理解 test.c
.
2. 编译运行程序,提交运行截图
- 编译运行
以上是关于20165223 《信息安全系统设计基础》 stat命令的实现-mysate的主要内容,如果未能解决你的问题,请参考以下文章
20165223 《信息安全系统设计基础》 stat命令的实现-mysate
收录近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
收录近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|