在学习Linux命令基础总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

08-linux-day04(stat-readdir-dup2)

 

 


一、学习目标

1、掌握stat/lstat函数的使用

2、了解文件属性相关的函数使用

3、了解目录操作相关的函数的使用

4、掌握目录遍历相关函数的使用

5、掌握dup、dup2函数的使用

6、掌握fcntl函数的使用

 


虚函数地址空间

Linux命令基础——08-linux-day04(stat-readdir-dup2)


 

二、文件和目录操作

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 指定文件——查看指定文件的索引号

Linux命令基础——08-linux-day04(stat-readdir-dup2)

 

Linux命令基础——08-linux-day04(stat-readdir-dup2)

 


Linux命令基础——08-linux-day04(stat-readdir-dup2)

查找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,转载请注明出处。

相关文章: