20165223 《資訊安全系統設計基礎》 stat命令的實現-mysate
阿新 • • 發佈:2019-01-12
學習使用stat(1),並用C語言實現
1. 提交學習 stat(1) 的截圖
2. man -k ,grep -r的使用
3. 編寫mystate.c的虛擬碼
4. 產品程式碼 mystate.c,提交碼雲連結
5. 測試程式碼,mystat 與 stat(1) 對比,提交截圖
一、學習 stat
二、實現 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>\n", 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\n"); break; case S_IFCHR: printf("character device\n"); break; case S_IFDIR: printf("directory\n"); break; case S_IFIFO: printf("FIFO/pipe\n"); break; case S_IFLNK: printf("symlink\n"); break; case S_IFREG: printf("regular file\n"); break; case S_IFSOCK: printf("socket\n"); break; default: printf("unknown?\n"); break; } printf("I-node number: %ld\n", (long) sb.st_ino); printf("Mode: %lo (octal)\n",(unsigned long) sb.st_mode); printf("Link count: %ld\n", (long) sb.st_nlink); printf("Ownership: UID=%ld GID=%ld\n",(long) sb.st_uid, (long) sb.st_gid); printf("Preferred I/O block size: %ld bytes\n",(long) sb.st_blksize); printf("File size: %lld bytes\n",(long long) sb.st_size); printf("Blocks allocated: %lld\n",(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\n"); 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. 編譯執行程式,提交執行截圖
- 編譯執行