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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Linux C高级编程——目录操作

發(fā)布時間:2023/12/20 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C高级编程——目录操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Linux C目錄操作

?

宗旨:技術(shù)的學(xué)習(xí)是有限的,分享的精神是無限的。

?

?????? Linux思想“一切皆文件”,目錄也是文件,只是存儲的內(nèi)容有別于普通文件。目錄文件中存儲的該目錄下所有的文件及子目錄文件的信息,inode節(jié)點。

一、打開/關(guān)閉目錄文件

1、 opendir

——打開目錄

(1)函數(shù)原型

?

#include <dirent.h> DIR *opendir(const char *dirname);

?

(2)函數(shù)參數(shù)

? ? ? ? dirname:要打開的目錄路徑

(3)返回值

? ? ? ? 執(zhí)行成功返回一個目錄流指針(與文件流類似,直接用就行),失敗返回NULL。

?

2、 closedir

——關(guān)閉指定的目錄流

(1)函數(shù)原型

?

#include <dirent.h> int *closedir(DIR *stream);

?

(2)函數(shù)參數(shù)

? ? ? ?stream:目錄流指針(類似于文件流指針fp一樣)

(3)返回值

? ? ? ? 執(zhí)行成功返回0,執(zhí)行失敗返回-1。

這兩函數(shù)操作的對象DIR對用戶層是透明,不必關(guān)心其實現(xiàn)細(xì)節(jié)。

【typedef struct dirstream DIR】

?

二、/寫目錄內(nèi)容

1、 readdir

——讀取目錄內(nèi)容(目錄下存儲的是該目錄下的文件名和對應(yīng)的磁盤inode信息位置,讀取目錄內(nèi)容就是讀取該目錄下的文件名及文件信息。)

(1) 函數(shù)原型

?

struct dirent *readdir(DIR *stream) struct dirent {long d_ino; // inode值off_t d_off; //從目錄開始到當(dāng)前目錄條的距離unsigned shortd_reclen; // 存儲文件名的空間大小unsigned char d_type; // 文件類型char d_name[256]; // 文件名,’\0’結(jié)束 };

?

(2)函數(shù)參數(shù)

? ? ? ? stream:目錄流指針

(3)返回值

? ? ? ? 每調(diào)用一次,返回指向下一個目錄的指針,失敗返回NULL。

?

2、 readdir_r

——讀取目錄內(nèi)容(readdir在多線程中不安全,readdir_r解決了多線程中不安全的問題)

(1)函數(shù)原型

?

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

?

(2)函數(shù)參數(shù)

? ? ? ? stream:目錄流指針

? ? ? ? entry:表示第一個參數(shù)所引用的目錄流中的當(dāng)前位置

? ? ? ? result:指示的位置存儲指向該結(jié)構(gòu)的目錄信息

(3)返回值

? ? ? ? 返回成功,在第三個參數(shù)返回一個指向描述目錄條目的struct dirent類型的指針,到達(dá)目錄結(jié)尾,則第三個參數(shù)中返回NULL指針,函數(shù)返回0;執(zhí)行失敗返回-1.

?

三、定位目錄位置

1、 telldir

——目錄流相關(guān)聯(lián)的當(dāng)前位置

(1)函數(shù)原型?

?

long int telldir(DIR *stream);

?

(2)函數(shù)參數(shù)

? ? ? ? stream:目錄流指針

(3)返回值

? ? ? ? 成功返回一個long類型的位置值,指示目錄中的當(dāng)前位置,失敗返回-1。

?

2、 seekdir

——在目錄流中設(shè)置下一個readdir操作的位置

(1)函數(shù)原型

?

void seekdir(DIR *stream, long int loc);

?

(2)函數(shù)參數(shù)

? ? ? ? stream:目錄流指針

? ? ? ? loc:從telldir()獲取的目錄流中的一個位置

(3)返回值

? ? ? ? 無返回值,錯誤將設(shè)置errno

3、 rewinddir

——將目錄流的位置重置到目錄的開頭

(1)函數(shù)原型

?

void rewinddir(DIR *stream);

?

(2)函數(shù)參數(shù)

? ? ? ? stream:目錄流指針

(3)返回值

? ? ? ? 將stream引用的目錄流的位置重置到目錄的開頭。

?

四、添加和刪除目錄

1、 mkdir

——創(chuàng)建一個目錄

(1)函數(shù)原型

?

int mkdir(const char *path, mode_t mode);

?

(2)函數(shù)參數(shù)

? ? ? ? path:欲創(chuàng)建的文件的路徑

? ? ? ? mode:目錄的訪問權(quán)限,【mode&~umask&0777】

(3)返回值

? ? ? ? 執(zhí)行成功返回0,失敗返回-1。

?

2、 rmdir

——刪除目錄

(1)函數(shù)原型

?

int rmdir(const char *path);

?

(2)函數(shù)參數(shù)

? ? ? ? path:欲刪除的目錄文件路徑

(3)返回值

? ? ? ? ?執(zhí)行成功返回0,失敗返回-1。

?

五、獲取當(dāng)前工作路徑操作

?

char *getcwd(char *buf, size_t size); // 將當(dāng)前路徑的絕對路徑置于buf并返回buf,size的大小必須比返回的路徑名長度大1,否則返回NULLchar *get_current_dir_name(void);// 成功返回絕對路徑,失敗返回NULL<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">??</span>

?

?

#include <stdio.h> #include <stdlib.h> #include <dirent.h>int main(int argc, char *argv[]) /* 瀏覽指定文件夾下的文件 */ {DIR *stream;struct dirent *dp;stream = opendir(argv[1]);while((dp = readdir(stream)) != NULL){if(dp->d_name[0] == '.'){continue;}printf("%s ", dp->d_name);}closedir(stream);return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的Linux C高级编程——目录操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。