在学习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 [email protected] $^ -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补充
在学习Linux命令基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。