linux中的read函数_linux open函数

linux中的read函数_linux open函数1.首先要打开目录文件DIR*opendir(constchar*name);DIR*fdopendir(intfd);2.读取目录文件信息的函数注意:这是个库函数structdirent*readdir(DIR*dirp);intreaddir_r(DIR*dirp,structdirent*entry,st…

大家好,又见面了,我是你们的朋友全栈君。

1.首先要打开目录文件

DIR *opendir( const char *name);

DIR *fdopendir( int fd);

2.读取目录文件信息的函数    

注意:这是个库函数

struct dirent *readdir( DIR *dirp);

int readdir_r(    DIR *dirp,     struct dirent *entry,    struct dirent **result);

文件目录结构体:

struct dirent {
      ino_t          d_ino;       /* inode number 索引节点号*/
      off_t          d_off;       /* not an offset; see NOTES 在目录文件中的偏移*/
      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]; /* filename 文件名,最长255字符*/
           };

 

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.

DT_UNKNOWN The file type is unknown.

readdir()函数实例:

注意:

每次使用readdir后,readdir会读到下一个文件,readdir是依次读出目录中的所有文件,每次只能读一个

这个特性和readdir_r()一样

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char **argv)
 
{
	DIR *pDir = NULL;
	struct dirent * pEnt = NULL;
	unsigned int cnt = 0;	
	if (argc != 2)
	{
		printf("usage: %s dirname\n", argv[0]);
		return -1;
	}
	pDir = opendir(argv[1]);
	if (NULL == pDir)
	{
		perror("opendir");
		return -1;
 
	}	
	while (1)
	{
		pEnt = readdir(pDir);
		if(pEnt != NULL)
		{
			if (pEnt->d_type == DT_REG)
			{
				printf("是普通文件:");
			}
			else
			{
				printf("不是普通文件:");
			}
			printf("name:[%s]	\n", pEnt->d_name);
			cnt++;
		}
		else
		{
			break;
		}
	};
	printf("总文件数为:%d\n", cnt);
	return 0;
}

结果:

$ ./a.out .
是普通文件:name:[a.c]	
不是普通文件:name:[.]	
不是普通文件:name:[..]	
是普通文件:name:[a.out]	
不是普通文件:name:[12_sr]	
不是普通文件:name:[10_sr]	
不是普通文件:name:[17_sr]	
不是普通文件:name:[15_sr]	
不是普通文件:name:[14.sr]	
不是普通文件:name:[18_sr]	
不是普通文件:name:[udp]	
不是普通文件:name:[16_sr]	
不是普通文件:name:[tcp]	
总文件数为:13

readdir_r():

注意:

这三个参数

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
	DIR *pDir = NULL;
	struct dirent * pEnt = NULL;
    	struct dirent *entry = (struct dirent *)malloc(sizeof(struct dirent));
    	struct dirent **result = (struct dirent **)malloc(sizeof(struct dirent));
	unsigned int cnt = 0;
	unsigned int ret = 0;	
	if (argc != 2)
	{
		printf("usage: %s dirname\n", argv[0]);
		return -1;
	}
	pDir = opendir(argv[1]);
	if (NULL == pDir)
	{
		perror("opendir");
		return -1;
	}
	ret = readdir_r(pDir , entry , result);
	printf("return	:%d	\n", ret);
	printf("name	:[%s]	\n", entry->d_name);
	printf("name	:[%s]	\n", result[0]->d_name);
	ret = readdir_r(pDir , entry , result);
	printf("return	:%d	\n", ret);
	printf("name	:[%s]	\n", entry->d_name);
	printf("name	:[%s]	\n", result[0]->d_name);
	return 0;

}

结果:

linux中的read函数_linux open函数

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125142.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IO编程与线程概念

    IO编程与线程概念IO编程IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Output,随后新浪

    2022年5月15日
    28
  • 天气预报api免费接口_天气API

    天气预报api免费接口_天气API网上几乎所有的天气接口都需要注册key,然后还各种频率限制,每天调用次数才几百次?太坑爹了吧一个简单的天气预报功能,为什么要搞的这么复杂,收什么费?推荐一个真正免费的天气API接口,返回json,jsonp格式没有调用次数、频率和IP限制,并且提供7日天气/15日天气/40日天气/小时预报/生活指数/空气质量/预警信息调用也很简单,一行代码搞定,可在A…

    2022年8月30日
    1
  • 前端json字符串转json对象_list对象转json

    前端json字符串转json对象_list对象转jsonjson字符串转json对象varobj=eval(‘(‘+str+’)’);或者varobj=str.parseJSON();//由JSON字符串转换为JSON对象或者varobj=JSON.parse(str);//由JSON字符串转换为JSON对象

    2022年10月7日
    0
  • Telerik字符压缩算法

    Telerik字符压缩算法

    2021年8月20日
    51
  • strlen在c++的头文件_linux配置头文件路径

    strlen在c++的头文件_linux配置头文件路径匿名用户1级2011-04-20回答stm32f10x_type.h这个文件里面;你也可e799bee5baa6e4b893e5b19e31333264633561以自己设置;我就是这样设置的typedefunsignedcharuint8;/*definedforunsigned8-bitsintegervariable无符号8位整…

    2022年9月6日
    2
  • vlan trunk对应的协议是_清楚怎么解释

    vlan trunk对应的协议是_清楚怎么解释什么是vlanvlan(VirtualLAN),翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。在此之前让我们先复习一下广播域的概念。广播域,指的是广播帧(目标MAC地址全部为1)所能传递到的范围,亦即能够直接通信的范围。严格地说,并不仅仅是广播帧,多播帧(MulticastFrame)和目标不明的单播帧(UnknownUnicastFrame)也能在同一个广播域中畅行无

    2022年8月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号