主要是在学习NJU的OS时遇到的一些C语言API。仅以小结。
[toc]
C_API 文件类 列出文件夹下文件(Linux) 头文件
变量定义:
1 2 3 4 DIR* dir = opendir("/proc" ); struct dirent * entry ; entry = readdir(dir); closedir(dir);
tldr
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 DIR *dir;struct dirent * entry ; dir = opendir("/proc" );if (dir){ while ((entry = readdir(dir)) != NULL ){ if (strcmp (entry->d_name, "." ) != 0 && strcmp (entry->d_name, ".." ) != 0 ){ printf ("filename: %s\n" , entry->d_name); } } closedir(dir); }else { perror("open /proc failed.\n" ); return -1 ; }
判断文件是文件还是文件夹 头文件:
变量定义:
1 2 3 4 struct stat file_stat ; stat(const char * path, struct stat* buffer); S_ISREG(mode_t mode); S_ISDIR(mode_t mode);
tldr
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 const char *path = "/path/to/file_or_directory" ;struct stat file_stat ;if (stat(path, &file_stat) == 0 ) { if (S_ISREG(file_stat.st_mode)) { printf ("%s is a regular file.\n" , path); } else if (S_ISDIR(file_stat.st_mode)) { printf ("%s is a directory.\n" , path); } else { printf ("%s is neither a regular file nor a directory.\n" , path); } } else { perror("stat" ); return 1 ; }
字符串类 分割字符串函数 头文件:
变量定义:
1 2 char * strtok (char * str, const char * split) ;
tldr
:
1 2 3 4 5 6 7 8 char str[] = "Hello,World,How,Are,You" ;char *token; token = strtok(str, "," );while (token != NULL ) { printf ("%s\n" , token); token = strtok(NULL , "," ); }
其他 接收可变参数库stdarg.h 头文件:
变量定义:
1 2 3 4 va_list args; va_start(args, last); va_arg(args, type); va_end(args);
一个简单的例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdarg.h> int sum (int count, ...) { int result = 0 ; va_list args; va_start(args, count); for (int i = 0 ; i < count; i++) { int num = va_arg(args, int ); result += num; } va_end(args); return result; }int main () { printValues(3 , 10 , 20 , 30 ); return 0 ; }
可以看到,只需要在编写函数的接收参数的地方写下省略号,即可完成可变参数的接收。