本篇内容跳跃且杂乱,后续可能会再次对内容进行整理。
文件系统调用
遍历目录
目录是一种特殊的文件,对其进行操作是,需要用到opendir、readdir、closedir等函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include <errno.h>
void list_dir( char * dir_name ){ DIR * dirp; struct dirent *direntp; if((dirp=opendir(dir_name)) == NULL ){ fprintf(stderr,"Error Message: %s\n", strerror(errno)); exit(0); } while((direntp = readdir(dirp)) != NULL){ if( strcmp(".",direntp->d_name) && strcmp("..",direntp->d_name) ){ printf( "%d => %s\n", direntp->d_type, direntp -> d_name ); } } closedir(dirp); }
void main(){ list_dir("/tmp"); }
|
获取文件信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include <errno.h> #include <sys/stat.h>
#define DIRECTORY "/tmp/"
void file_info(char * file){ printf("\t%s\n",file); struct stat stat_buf; if( stat(file,&stat_buf) == -1 ){ fprintf(stderr,"Error Message: %s\n", strerror(errno)); exit(0); } printf("\tDevice: %d\n", stat_buf.st_dev); printf("\ti-Nnumber: %d\n", stat_buf.st_ino); printf("\tSize: %d\n", stat_buf.st_size); }
void list_dir( char * dir_name ){ DIR * dirp; struct dirent *direntp; if((dirp=opendir(dir_name)) == NULL ){ fprintf(stderr,"Error Message: %s\n", strerror(errno)); exit(0); } while((direntp = readdir(dirp)) != NULL){ if( strcmp(".",direntp->d_name) && strcmp("..",direntp->d_name) ){ printf( "%d => %s\n", direntp->d_type, direntp -> d_name ); char file_path[256] = ""; strcat(file_path,DIRECTORY); strcat(file_path,direntp->d_name); file_info(file_path); strcpy(file_path,""); } } closedir(dirp); }
void main(){ list_dir(DIRECTORY); }
|
解析文件描述符
Linux系统中,进程拥有各自打开文件的描述符。通常,文件描述符按生成顺序放在文件描述符表中。Linux内核将文件描述符表用一维数组描述,每个打开的文件占用一个单元,用于存放存取文件的必要信息。
信号系统调用
信号是内核与进程间通信的一种方式。内核为每个进程定义了多种信号和处理方式,用户也可以根据需要对信号的处理方式进行重新定义。
Linux内核共定义了31种非实时的信号,为没种信号定义了处理动作,包括结束进程、写入内核文件、停止进程和忽略等。
信号默认处理方式
符号 |
含义 |
A |
结束进程 |
B |
忽略信号 |
C |
结束进程并写入内核文件 |
D |
停止进程 |
E |
信号不能被捕获 |
F |
信号不能被忽略 |
G |
非POSIX信号 |
可靠信号与不可靠信号
因为早期历史原因,将信号值小于32的信号称为不可靠信号,32~63之间的信号称为可靠信号,也称为实时信号。
I/O操作模式
基本I/O操作模式
- 阻塞模式
- 非阻塞模式
- 同步方式
- 异步方式
文件I/O操作模式
- 同步阻塞I/O模式
- 同步非阻塞I/O模式
- I/O多路复用模式
- 信号驱动I/O模式
- 异步I/O模式