在学习Linux命令基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
08-linux-day04(stat-readdir-dup2)
一、学习目标
1、掌握stat/lstat函数的使用
2、了解文件属性相关的函数使用
3、了解目录操作相关的函数的使用
4、掌握目录遍历相关函数的使用
5、掌握dup、dup2函数的使用
6、掌握fcntl函数的使用
虚函数地址空间
二、文件和目录操作
1、打开最大文件数量
### xxx.c ---> xxx
>touch makefile
>vi makefile
1 ### xxx.c ---> xxx
2 SrcFiles=$(wildcard *.c)
3 TargetFiles=$(patsubst %.c,%,$(SrcFiles))
4
5 all:$(TargetFiles)
6
7 %:%.c
8 gcc -o $@ $^ -g
9
10 clean:
11 rm -f $(TargetFiles)
>touch openmax.c
>vi openmax.c
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<fcntl.h>
5 #include<unistd.h>
6
7 int main()
8 {
9 int num = 3;
10 char filename[128]={0};
11 while(1)
12 {
13 sprintf(filename,"temp_%04d",num++);
14 if(open(filename,O_RDONLY|O_CREAT,0666) < 0)
15 {
16 perror("open error");
17 break;
18 }
19 }
20 printf("num == %d\n", num);
21 return 0;
22 }
>make
>./openmax
open err:Too many open files
num == 1025
2、stat函数介绍
》man 2 stat
int stat(const char* pathname, struct stat *buf);
>touch hello
>vi hello
(随便输入内容后保存退出)
>ln hello hello.hard
>ls -lrt
>ls -i hello*
输出:2642317 hello 2642317 hello.hard(ls -i 指定文件——查看指定文件的索引号)
查找timespec结构体
>sudo grep -rn "struct timespec {" /usr/
查到time.h的位置 打开
>vi +9 文件位置
struct timespec {
__kernel_time_t tv_sec;/*seconds*/当前时间到1970.1.1 0:0:0秒数
long tv_nsec;/*nanoseconds*/纳秒
};
3、stat函数介绍2与stat命令
》stat函数参数
pathname 文件名
struct stat *buf 传出参数,定义struct stat sb;&sb
》返回值:成功返回0,失败返回-1
>touch stat.c
>vi stat.c
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<unistd.h>
5
6 int main()
7 {
8 if(argc != 2)
9 {
10 printf("./a.out filename\n");
11 return -1;
12 }
13 struct stat sb;
14 stat(argv[1],&sb);
15 return 0;
16 }
保存退出
>make
>gdb stat
(gdb)b main
(gdb)run hello
(gdb)n
回车直到return 0;
(gdb)p sb
输出了结构体sb的信息
(gdb)p/o sb.st_mode
p/o 变量名:可以8进制查看某变量
》stat命令
>stat stat.c
还可以输出文件最近访问的时间(文件最新被读的时间)、最近更改的时间(内容更改)、最近改动的时间(大小、权限、硬链接等属性更改)
扩展:重定向可以只更改最近更改时间和最近改动时间,而不会更改文件最近访问时间
如:echo "hello world" >> hello;然后stat hello
4、实现ls -l命令1
实现ls -l命令2
stat与lstat的区别
access与truncate
readlink、unlink
unlink补充