嵌入式Linux C编程学习之路(十五)——标准IO之fread、fwrite和目录IO

2019-07-12 17:40发布

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; }