一、目录IO。
1.为什么要学习目录IO接口?
目录可以存放一些文件/目录,如果学习目录IO操作,那么我们就可以通过目录的名字来将目录下的全部名字读取出来,方便后续的操作。
例如:usr_data/
bling.txt aaa.txt bbb.txt --> 通过目录IO操作函数,就可以求出这些文件的名字。
2.访问文件与访问目录有什么区别?
访问文件 --> 得到文件里面的内容。
访问目录 --> 得到目录项的名字、属性、类型..
二、目录IO函数接口?
1.如何打开目录? --> opendir() --> man 3 opendir (directory目录)
#include <sys/types.h>
#include <dirent.h> //目录的专属头文件
DIR *opendir(const char *name);
参数:
name: 需要打开的那个目录的路径
返回值:
成功:目录流指针(目录项指针)
失败:NULL
问题:打开一个目录是不是意味着已经切换进去了?
答案:没有切换进去。
2.如何切换到目录中? --> chdir() --> man 3 chdir
问题:一定要切换到目录下,才能读取目录的东西吗?
答案:不一定,但是切换进去之后,该目录下所有的文件都是当前目录下的文件,访问这些文件就很方便。
#include <unistd.h>
int chdir(const char *path);
参数:
path: 需要切换的那个目录的路径。
返回值:
成功:0
失败:-1
练习1:
将目录usr_data目录里面文件bling.txt里面的信息打印出来 (尽量用标准IO来操作)
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc,char **argv)
{
//打开目录
DIR *dp = opendir("./usr_data");
if(dp == NULL)
{
perror("opendir fail");
return -1;
}
//切换到目录里面去
chdir("./usr_data");
//读文件(普通文件尽量用标准IO打开)
FILE *fp;
fp = fopen("bling.txt","r+");
if(fp == NULL) //比较运算符'=='不能写成'='
{
perror("fopen file fail");
return -1;
}
//读信息
char buf[1024] = {0};
fread(buf,1,sizeof(buf),fp);
printf("buf:%s\n",buf);
char str1[20] = {0};
char str2[20] = {0};
char str3[20] = {0};
char str4[20] = {0};
//sscanf
sscanf(buf,"%[^','],%[^','],%[^','],%s",str1,str2,str3,str4);
printf("str1:%s str2:%s str3:%s str4:%s