一. 思维导图
二. 练习
1) 使用stat,模仿ls
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, const char *argv[]) {
if (argc != 2) {
printf("参数数量不正确\n");
return -1;
}
struct stat sb;
stat(argv[1], &sb);
char type;
switch(sb.st_mode&S_IFMT) {
case S_IFSOCK:
type = 's';
break;
case S_IFLNK:
type = 'l';
break;
case S_IFREG:
type = '-';
break;
case S_IFBLK:
type = 'b';
break;
case S_IFDIR:
type = 'd';
break;
case S_IFCHR:
type = 'c';
break;
case S_IFIFO:
type = 'p';
break;
default:
type = '-';
}
printf("%c", type); //打印文件类型
unsigned int m = sb.st_mode&0777;
for (int i=0; i<9; i++) {
char result = '-';
if ((m>>(8-i)) & 1) {
if (i%3 == 0) {
result = 'r';
} else if (i%3 == 1) {
result = 'w';
} else {
result = 'x';
}
}
printf("%c", result);
}
printf("\n");
return 0;
}
结果展示: