linux目录操作

目录:目录文件
  文件中保存:字符文本  二进制
  目录文件中保存:文件名


打开目录:opendir
     进程获取了硬盘中一个区域的访问权限并映射到内存中。
    #include <sys/types.h>
    #include <dirent.h>
    DIR *opendir(const char *name);
    DIR *fdopendir(int fd);//ioctl   
    DIR*     相当于 FILE*
    读打开了的目录:
     readdir    man 3
    #include <sys/types.h>
    #include <dirent.h>
    struct dirent *readdir(DIR *dir);//opendir的返回值
    readdir函数内部会开辟sizeof(struct dirent)大小的内存并给这段内存赋值,最后返回这段的内存的首地址
    struct dirent {
        ino_t    d_ino;   //节点  整数   表示文件在虚拟文件系统中的位置   
        off_t    d_off;   //偏移量 目录中位置  
        unsigned short d_reclen;   //记录长度
        unsigned char  d_type;     //文件类型
        char  d_name[256]; //文件名
    };
    d_type:有一些匹配的预定义宏
    DT_REG 普通文件
    DT_DIR 目录文件

。。。。。。。。。。。。。。。。。。。。。。。。。。。
ls例子
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
	DIR* dir = NULL;
	struct dirent* dirent = NULL;
	char dir_name[20] = {0};
	if(argc == 1){
		dir_name[0] = '.';
	}else if(argc == 2){
		strcpy(dir_name,argv[1]);
	}else{
		printf("输入错误!\n");
		exit(-1);
	}

	dir = opendir(dir_name);
	while(1){
		dirent = readdir(dir);
		if(dirent == NULL)  //空目录退出
			break;
		if(dirent->d_name[0] == '.') //不显示点开头的文件
			continue;
		printf("%s\t",dirent->d_name);	//显示文件名	
	}
	printf("\n");
	closedir(dir);

	return 0;
}
/*
	打印目录中所有内容,包括目录下目录的内容
*/

#include <stdio.h>
#include <dirent.h>

void print(char* n){
	char dir_name[256] = {0};
	DIR* dirp = NULL;
	struct dirent* dirent = NULL;
	dirp = opendir(n);
	while(1){
		dirent = readdir(dirp);
		if(dirent == NULL)//没有文件了,退出
			break;
		if(dirent->d_name[0] == '.')//是.和..忽略
			continue;
		if(dirent->d_type == DT_DIR){//是目录,需要进一步打印
			printf("%s/%s ",n,dirent->d_name);
			sprintf(dir_name,"%s/%s",n,dirent->d_name);	
			//printf("::%s\n",dir_name);
			print(dir_name);
		}
		if(dirent->d_type == DT_REG)//是文件,打印就完了
			printf("%s/%s ",n,dirent->d_name);
	}
	printf("\n");
	closedir(dirp);
}

int main(){
	char dir_name[256] = {0};
	printf("请输入要显示内容的目录名:");
	scanf("%s",dir_name);

	print(dir_name);

	return 0;
}	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值