日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opendir、readdir和closedir函数

發布時間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opendir、readdir和closedir函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注意:Linux中,目錄的輸入格式:/mnt//fghs/mnt/fghs/mnt/fghs/mnt/fghs//是等效的,都一樣。

#include <sys/types.h>

#include <dirent.h>

DIR *opendir(const char *name);

DIR *fdopendir(int fd);

返回值:出錯返回NULL,并可以通過perror函數查看詳細錯誤信息;成功,則返回一個DIR *類型的指針,該指針指向一個DIR類型的結構體,該結構體描述了所打開的目錄的一些信息。可以類比open函數:FILE * fp=open( );打開一個文件,則返回一個FILE *類型的指針:包含了文件描述符、文件讀寫指針和I/O緩沖區三部分。則打開一個目錄,返回一個DIR *類型的指針(目錄指針),利用該指針可以對打開的目錄進行讀操作和關閉該目錄

?

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

作用:讀一個打開了的目錄,該函數可以自動遍歷目錄內部所有的文件,一個個自動進行遍歷,直到全部遍歷完。

返回值:成功,則返回一個struct dirent *類型的指針,指向struct dirent *結構體,該結構體包含了該目錄中某一個文件的詳細信息,包括:

struct dirent

{

??? ino_t ??d_ino; ?// 此目錄進入點(該文件)的inode

??? ff_t ???d_off;? // 目錄文件開頭至此目錄進入點的位移(目錄內文件為1,目錄內的目錄內部文件為2等等)

??? signed short int ??d_reclen; ??// d_name 的長度, 不包含NULL字符(0、\0)

? ??unsigned char?? ?d_type;????? // d_name 所指的文件類型

??? har? ?d_name[256];??? ?????? // 文件名(字符串類型)

};??? ?//后兩個成員常用,記住!!

對于d_type的說明(宏定義):DT_BLK 塊設備文件 ??DT_CHR 字符設備? DT_DIR 目錄文件? DT_LNK 軟鏈接文件? DT_FIFO管道文件?? DT_REG? 普通文件??? DT_SOCK? 套接字文件???? DT_UNKNOW? 未知?? ?-D_BSD_SOURCE 編譯時添加宏定義

則遍歷到哪一個文件,則就返回該文件對應的struct dirent結構體。遍歷完目錄內部的最后一個文件后,會返回NULL,因此判斷一個目錄是否遍歷完,判斷其返回值是否為NULL即可,此時不代表出錯,因此不會改變errno的值。若函數出錯,也會返回NULL,且會修改errno的值。

?

#include <sys/types.h>

#include <dirent.h>

int closedir(DIR *dirp);

作用:關閉目錄文件? 注意,打開目錄后,不要忘記關閉。

返回值:0 成功? -1失敗

?

//遞歸讀一個目錄,統計一個目錄內部所有普通文件的個數(注意是遞歸,包括子目錄)。

[root@localhost dir_op]# vim read_file_num.c

#include <stdio.h> #include <stdlib.h> #include <string.h>int countFileNum( const char * ); //函數聲明int countFileNum( const char *dirName ) //定義一個統計普通文件數目的函數 {DIR *dir=NULL;dir = opendir(dirName); //打開需要統計的目錄if( dir == NULL ){perror("opendir");exit(1);}struct dirent *fx = NULL;fx = readdir( dir ); //讀該目錄,注意是每讀一次,就自動遍歷到下一個文件,因此必須要讀一次,才能遍歷到下一個文件。if( fx == NULL ){perror("readdir");exit(1);}int total=0;char buff[1024]={0}; //建立緩沖區while( fx ) //fx為NULL,則循環結束{if( strcmp(fx->d_name , ".") == 0 || strcmp( fx->d_name , "..") == 0 ){fx = readdir( dir ); //必須讀一次,否則陷入死循環continue;} //字符串比較函數,排除.和..(當前目錄和上級目錄)if( fx->d_type == DT_DIR ) //如果是目錄文件,則遞歸調用,注意遞歸思想{sprintf( buff,"%s/%s",dirName,fx->d_name ); //d_name只是目錄本身的名字,不包含路勁(上級目錄等)total += countFileNum( buff );}if( fx->d_type == DT_REG )total++;fx = readdir( dir ); //必須要讀一次,否則不會遍歷下一個文件}int qw = 0;qw = closedir(dir);if( qw==-1 ){perror("closedir");exit(1);} //關閉目錄return total; }int main( int argc , char *argv[ ] ) {if( argc < 2 ){printf( "./a.out dirName\n");exit(1);}int num = 0;num = countFileNum( argv[1] );printf( " the number of reg file is %d.\n",num);return 0; }

[root@localhost dir_op]# gcc -pipe -Wall -pedantic -ggdb3 read_file_num.c -o read_file_num

[root@localhost dir_op]# ls

a.out? chdir? chdir.c? fileNum? fileNum.c? haha.c? hehe.c? mkdir.c? mytest? opendir.c? readdir.c? read_file_num? read_file_num.c

[root@localhost dir_op]# ./read_file_num .

?the number of reg file is 13. ??//成功統計出當前目錄中的普通文件數為13.

總結

以上是生活随笔為你收集整理的opendir、readdir和closedir函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 骚鸭av | 国产三级黄色 | 欧美午夜大片 | av5566| 手机在线观看av | 超碰成人免费电影 | 91av一区 | 欧美专区日韩专区 | 亚洲国产传媒 | 国产精品一亚洲av日韩av欧 | 狼色网 | 91日本在线观看 | 男男做爰猛烈啪啪高 | 啪啪导航| 成人av免费网址 | 波多野结衣影片 | 国产在线精品一区二区三区 | 久久人妻精品白浆国产 | 78m78成人免费网站 | 一级日韩片 | 欧美老女人bb | 国产午夜精品一区二区三区视频 | av国产一区二区 | aaaaa级少妇高潮大片免费看 | 青青青草视频在线观看 | 特级丰满少妇一级aaaa爱毛片 | 国产精品无码久久久久成人app | 快播视频在线观看 | av一区二区免费 | 豆花在线观看 | 少妇厨房愉情理伦bd在线观看 | 一区二区视频国产 | 日本一区二区免费视频 | 人人射视频 | 99精品视频免费版的特色功能 | 欧美成人二区 | 国产做爰xxxⅹ性视频国 | 无码精品在线视频 | 欧美性高潮 | 欧美性生活在线视频 | 精品综合久久 | 久久中文字幕电影 | 日韩大片免费在线观看 | 超碰成人免费电影 | 日本免费一区二区视频 | 日本a v在线播放 | 久久99久久99精品免观看粉嫩 | 日韩欧美在线观看一区 | 婷婷视频一区二区三区 | 国模吧一区二区三区 | 陪读偷伦初尝小说 | 激情伦成人综合小说 | 福利小视频在线播放 | 色欲亚洲Av无码精品天堂 | 日韩精品综合 | 动漫美女被x | 国产精品爽爽 | 91精品网 | 女同二区| 秋霞网一区二区三区 | 在线成人小视频 | 97色在线 | free黑人多人性派对hd | 免费日本视频 | www.jizzjizz.com | 国产精品人人做人人爽人人添 | 欧洲亚洲女同hd | 日本69av| 精品三级在线 | 中文字幕在线欧美 | 日日操夜夜撸 | 中国黄色1级片 | 91精品久久久久久久久 | 乳揉みま痴汉4在线播放 | 亚洲国产一二三 | 久草视频免费 | 欧美综合影院 | 亚洲4p | 欢乐谷在线观看免费播放高清 | 91欧美视频 | 无码一区二区三区在线观看 | 人妻丰满熟妇av无码区 | 韩国电影一区二区三区 | 黄色免费在线网站 | 色老头网址 | 日韩久操 | 色女孩综合网 | 日韩电影在线一区 | 情侣作爱视频网站 | 中文日韩在线 | 成人区一区二区 | 超碰资源 | 黄网在线观看视频 | 丁香婷婷视频 | 久久欲| 欧美性生活网站 | 在线观看日本网站 | 女同hd系列中文字幕 | 国产精品无码一区 |