1.opendir函数(打开目录)
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
功能:打开目录
参数:
@name:目录名
返回值:成功返回目录指针,失败返回NULL置位错误码
2.readdir函数(读取目录下的内容)
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
功能:读取目录下的内容
参数:
@dirp:目录的指针
返回值:成功返回dirent结构体指针
失败返回NULL置位错误码
struct dirent {
ino_t d_ino; //读取到的文件的inode号
off_t d_off; //无需关注
unsigned short d_reclen; //这个结构体的大小
unsigned char d_type; //文件的类型
DT_BLK This is a block device.
DT_CHR This is a character device.
DT_DIR This is a directory.
DT_FIFO This is a named pipe (FIFO).
DT_LNK This is a symbolic link.
DT_REG This is a regular file.
DT_SOCK This is a UNIX domain socket.
char d_name[256]; //读取到文件的文件名
};
3closedir函数(关闭目录)
int closedir(DIR *dirp);
功能:关闭目录
参数:
@dirp:目录指针
返回值:成功返回0,失败返回-1,职位错误码
4目录操作的实例
#include <dirent.h>
#include <head.h>
int main(int argc, const char* argv[])
{
DIR* dirp;
struct dirent* dt;
// 1.校验输入成员的个数
if (argc != 2) {
fprintf(stderr, "input error,try again\n");
fprintf(stderr, "usage:./a.out dirname\n");
return -1;
}
// 2.打开目录
if ((dirp = opendir(argv[1])) == NULL)
PRINT_ERR("open dir error");
// 3.读取目录下的内容
while ((dt = readdir(dirp)) != NULL) {
switch (dt->d_type) {
case DT_BLK:
printf("这是块设备文件\n");
break;
case DT_CHR:
printf("这是块设备文件\n");
break;
case DT_DIR:
printf("这是目录文件\n");
break;
case DT_FIFO:
printf("这是管道文件文件\n");
break;
case DT_LNK:
printf("这是软连接文件\n");
break;
case DT_REG:
printf("这是普通文件\n");
break;
case DT_SOCK:
printf("这是套接字文件\n");
break;
}
printf("name=%s,ino=%ld,size = %d\n",dt->d_name,dt->d_ino,dt->d_reclen);
}
closedir(dirp);
return 0;
}
5.结合目录操作和stat函数打印某个目录下文件的属性信息
#include <dirent.h>
#include <head.h>
#include <pwd.h>
#include <grp.h>
int main(int argc, const char* argv[])
{
DIR* dirp;
struct stat stbuf;
struct dirent* dt;
char buf[500];
// 1.校验输入成员的个数
if (argc != 2) {
fprintf(stderr, "input error,try again\n");
fprintf(stderr, "usage:./a.out dirname\n");
return -1;
}
// 2.打开目录
if ((dirp = opendir(argv[1])) == NULL)
PRINT_ERR("open dir error");
// 3.读取目录下的内容
while ((dt = readdir(dirp)) != NULL) {
switch (dt->d_type) {
case DT_BLK:
printf("这是块设备文件\n");
break;
case DT_CHR:
printf("这是块设备文件\n");
break;
case DT_DIR:
printf("这是目录文件\n");
break;
case DT_FIFO:
printf("这是管道文件文件\n");
break;
case DT_LNK:
printf("这是软连接文件\n");
break;
case DT_REG:
printf("这是普通文件\n");
break;
case DT_SOCK:
printf("这是套接字文件\n");
break;
}
printf("name=%s,ino=%ld,size = %d\n", dt->d_name, dt->d_ino, dt->d_reclen);
//在文件名前拼接上文件的路径
memset(buf,0,sizeof(buf));
snprintf(buf,sizeof(buf),"%s/%s",argv[1],dt->d_name);
if (stat(buf, &stbuf))
PRINT_ERR("get stat error");
printf("uid = %d,gid = %d,size = %ld,mode = %#o\n", stbuf.st_uid,
stbuf.st_gid, stbuf.st_size, stbuf.st_mode & 0777);
printf("usrname = %s,groupname = %s\n",
getpwuid(stbuf.st_uid)->pw_name,getgrgid(stbuf.st_gid)->gr_name);
}
closedir(dirp);
return 0;
}
6.输入一个文件名和目录,判断这个目录下是否有这个文件
#include <dirent.h>
#include <head.h>
#include <pwd.h>
#include <grp.h>
int main(int argc, const char* argv[])
{
DIR* dirp;
struct stat stbuf;
struct dirent* dt;
char buf[500];
// 1.校验输入成员的个数
if (argc != 3) {
fprintf(stderr, "input error,try again\n");
fprintf(stderr, "usage:./a.out filename pathname\n");
return -1;
}
// 2.打开目录
if ((dirp = opendir(argv[2])) == NULL)
PRINT_ERR("open dir error");
// 3.读取目录下的内容
while ((dt = readdir(dirp)) != NULL) {
if(!strcmp(argv[1],dt->d_name){
printf("你查找的文件存在\n");
return 0;
}
}
printf("你查找的文件不存在\n");
closedir(dirp);
return 0;
}
今天的文章对目录的操作是在什么标题下_进入根目录的命令分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/69636.html