1.目录IO是对目录的读写操作, 文件IO和标准IO是对文件的读写操作
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 number */
off_t d_off; /* Not an offset; see below */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file; not supported
by all filesystem types */
char d_name[256]; /* Null-terminated filename */
};
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\n");
return -1;
}
dp = opendir(argv[1]);
if(dp == NULL){
printf("open mydir error\n");
return -2;
}
while(1){
dir = readdir(dp);
loc = telldir(dp);
printf("loc =%d\n",loc);
if(dir != NULL){
printf("inode = %ld,name=%s\n",dir->d_ino,dir->d_name);
}else{
break;
}
}
closedir(dp);
return 0;
}
10. 例子:单机模式下的文件上传送和下载
(1) 输入服务器的地址: 路径和目录名
(2) 列出服务器中有哪些文件: opendir readdir
(3) 输入从服务器下载的文件名 或 上传文件到服务器的文件名
(4) 文件下载 或 文件上传送
文件IO: open read write close
标准IO fopen fputs fgets fputc fgetc fread fwrite fclose
#include "stdio.h"
#include "sys/types.h"
#include "dirent.h"
#include "string.h"
#include "unistd.h"
#include "fcntl.h"
int main(int argc, char *argv[]){
DIR *dp;
int fd;
struct dirent *dir;
char server[128] = {0};
int src_fd,des_fd;
char file[128]={0};
char buf[128]={0};
int ret;
start:
printf("please input server PATH and Directory name\n");
scanf("%s",server);
//list server files
dp = opendir(server);
if(dp == NULL){
printf("open server %s error\n",server);
goto start;
}
printf("open server %s success\n",server);
//read server dir
while(1){
dir = readdir(dp);
if(dir == NULL){
break;
}else{
printf("inode=%ld name =%s\n",dir->d_ino,dir->d_name);
}
}
printf("please input download file\n");
scanf("%s",file);
src_fd = open(strcat(strcat(server,"/"),file),O_RDONLY); //open server file
if(src_fd < 0){
printf("open download file :%s\n",file);
return -1;
}
printf("open download file %s success\n",file);
des_fd = open(file,O_CREAT | O_WRONLY,0777);
if(des_fd < 0){
printf("create file %s error\n",file);
return -2;
}
printf("create file %s success\n",file);
while(1){
ret = read(src_fd,buf,128);
if(ret < 128){
break;
}
write(des_fd,buf,ret);
}
write(des_fd,buf,ret);
close(des_fd);
close(src_fd);
closedir(dp);
return 0;
}
原文:https://blog.youkuaiyun.com/wenwen111111/article/details/58644332
原文:https://blog.youkuaiyun.com/wenwen111111/article/details/58639425