1..全缓存的二个函数: fread / fwrite
第一个参数 buf:写的内容
第四个参数 fp:写到哪里去
第二个参数 size:写的内容中,每一个单元所占的字节数
第三个参数 nmemb:写的内容中,有多少个单元数
总共写多少个字节,size*nmemb
返回值:实际写的单元数。
2. 读写函数效率比较
使用time ./fgetc a.c b.c(a.c拷贝到b.c) 可以统计运行的时间,查看运行效率
fgetc
fgets
fread
read
real
0.393s
0.207
user
0.180s
0.028
sys
0.120s
0.072
总体效率来看:fread/fwrite > fgets/fputs > fgetc/fputc > read/write
1. 文件IO和标准IO是对文件的读写操作
目录IO是对目录的读写操作
目录I/O与文件I/O函数的比较
目录I/O
文件I/O
opendir 只能打开目录
mkdir 创建目录
open
readdir 读目录
read
rewinddir 调整位置指针
telldir
seekdir
rewind
ftell
fseek
closedir:关闭目录
close
2. opendir
DIR *opendir(const char *pathname) ;
参数:打开的目录以及路径
返回值:成功返回目录流指针,出错返回NULL。
3. mkdir
int mkdir(const char * path, mode_t mode)
path为欲创建的目录文件路径,
mode为该目录的访问权限
返回值:若目录创建成功,则返回0;否则返回-1
生成的目录权限仍和umask有关系。
4. readdir
struct dirent *readdir(DIR *dr);
参数:目录流指针
返回值:成功则为struct dirent指针,若在目录尾或出错则返回NULL。
struct dirent定义在头文件dirent.h中。
此结构至少包含下列两个成员:
struct dirent {
ino_t d_ino; // inode 号
chard_name[NAME_MAX+1];//文件名
}
5. rewinddir:重置读取目录流的位置为开头
void rewinddir(DIR *dr);
参数:目录流指针
6. telldir
long telldir(DIR *dirp)
参数:目录流指针
返回值:目录流当前位置
7. seekdir
void seekdir(DIR *dirp , long loc)
类似于文件定位函数fseek(),在目录流上设置下一个readdir()操作的位置。
参数:目录流指针和偏移量
8. closedir
int close(DIR *dr);
参数:目录流指针
返回值:成功返回 0,出错返回- 1。
9. 目录IO操作示例
#include "stdio.h"
#include "sys/types.h"
#include "dirent.h"
int main(int argc, char *argv[]){
int ret;
DIR *dp;
struct dirent *dir;
long loc;
if (argc < 2){
printf("please input open directory
");
return -1;
}
dp = opendir(argv[1]);
if(dp == NULL){
printf("open mydir error
");
return -2;
}
while(1){
dir = readdir(dp);
loc = telldir(dp);
printf("loc =%d
",loc);
if(dir != NULL){
printf("inode = %ld,name=%s
",dir->d_ino,dir->d_name);
}else{
break;
}
}
closedir(dp);
return 0;
}