国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取

這篇具有很好參考價(jià)值的文章主要介紹了IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

? ? ? 一、文件IO

1、文件io通過(guò)系統(tǒng)調(diào)用來(lái)操作文件

系統(tǒng)調(diào)用:系統(tǒng)提供給用戶(hù)的一組API(接口函數(shù))

??????? open/read/write/close/lseek...

用戶(hù)空間進(jìn)程訪(fǎng)問(wèn)內(nèi)核的接口

把用戶(hù)從底層的硬件編程中解放出來(lái)

極大的提高了系統(tǒng)的安全性

使用戶(hù)程序具有可移植性(同一系統(tǒng)下)

是操作系統(tǒng)的一部分

文件io沒(méi)有緩存區(qū)概念

文件io操作文件的方式:通過(guò)文件描述符

shell默認(rèn)打開(kāi)了三個(gè)文件:

標(biāo)準(zhǔn)輸入? 標(biāo)準(zhǔn)輸出 標(biāo)準(zhǔn)錯(cuò)誤

stdin stdout? stderr????????????????? 用流來(lái)表示

? ????0? ?????? 1?????? 2?????????????????? 用文件描述符表示

2、文件IO相關(guān)函數(shù)

?????? 1、open函數(shù)

?????? 功能:

????????????? 打開(kāi)一個(gè)文件

?????? 頭文件

?????? ?? #include <sys/types.h>

?????? #include <sys/stat.h>

?????? #include <fcntl.h>

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

????????????? int open(const char *pathname, int flags);

?????? ?int open(const char *pathname, int flags, mode_t mode);

?????? 參數(shù)

??????? pathname:文件的路徑

????????????? flags:文件打開(kāi)的方式

???????????????????? O_RDONLY:只讀

???????????????????? O_WRONLY:只寫(xiě)

???????????????????? O_RDWR:可讀可寫(xiě)

???????????????????? 這三個(gè)宏互斥(三選一)

???????????????????? O_CREAT:如果文件不存在,則創(chuàng)建文件,此時(shí)用到open函數(shù)的第二種形式。

???????????????????? O_TRUNC:如果文件存在則清空文件的內(nèi)容。

???????????????????? O_APPEND:以追加的方式打開(kāi)文件。

????????????? ?????? IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取,算法,linux,文件IO

?????? mode:文件的權(quán)限,八進(jìn)制(0777)

IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取,算法,linux,文件IO

?????? 返回值

????????????? 成功返回一個(gè)新的文件描述符,失敗返回(-1)并設(shè)置錯(cuò)誤號(hào)。

?????? 2、close函數(shù)

?????? 作用:

????????????? 關(guān)閉文件

?????? 頭文件

?????? ?? #include <unistd.h>

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

????????????? int close(int fd);

?????? 參數(shù)

??????? 想要關(guān)閉的文件描述符

?????? 返回值

????????????? 成功返回0,失敗返回(-1)并設(shè)置錯(cuò)誤號(hào)。

?????? 3、read/write

????????1、read

????????????? 作用:

???????????????????? 向文件讀取內(nèi)容

?????? ??? 頭文件:

??????????? #include <unistd.h>

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

?????? ???????? ssize_t read(int fd, void *buf, size_t count);

????????????? 參數(shù)

???????????????????? fd:想要操作的文件描述符

???????????????????? buf:讀取到的內(nèi)容放到哪個(gè)地址

???????????????????? count:讀取到的文件中的字符數(shù)量

????????????? 返回值:

????????????? 成功返回已經(jīng)讀取到的字節(jié)數(shù),失敗返回-1并設(shè)置錯(cuò)誤號(hào),讀取到文件末尾返回0。

????????2、write

????????????? 作用:

???????????????????? 向文件寫(xiě)入內(nèi)容

?????? ??? 頭文件:

?? ?????????#include <unistd.h>

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

? ????????????? ssize_t write(int fd, void *buf, size_t count);

????????????? 參數(shù)

????????????? ?????? fd:想要寫(xiě)入的文件描述符

???????????????????? buf:需要寫(xiě)入文件的內(nèi)容

???????????????????? count:寫(xiě)入文件中字符數(shù)量

????????????? 返回值:

???????????????????? 成功返回已經(jīng)寫(xiě)入的字節(jié)數(shù),失敗返回-1并設(shè)置錯(cuò)誤號(hào)。

?????? 4、lseek

????????????? 作用:

???????????????????? 偏移文件內(nèi)的書(shū)簽

?????? ??? 頭文件:

??????????? #include <sys/types.h>

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

?????? ???????? off_t lseek(int fd, off_t offset, int whence);

????????????? 參數(shù)

???????????????????? fd:想要寫(xiě)入的文件描述符

???????????????????? offset:偏移量,正數(shù)表示后偏移,負(fù)數(shù)前偏移,0不偏移

???????????????????? whence:書(shū)簽偏移的起始位置

?????????????????????????????????? SEEK_SET:文件頭

?????????????????????????????????? SEEK_CUR:當(dāng)前位置

?????????????????????????????????? SEEK_END:文件末尾

????????????? 返回值:

???????????????????? 成功返回當(dāng)前偏移到的位置,失敗返回-1并設(shè)置錯(cuò)誤號(hào)。

? ? ? 二、文件和目錄

1、stat

?????? #include <sys/types.h>

?????? #include <sys/stat.h>

?????? #include <unistd.h>

int stat(const char *pathname, struct stat *statbuf);

int fstat(int fd, struct stat *statbuf);

int lstat(const char *pathname, struct stat *statbuf);

stat,lstat通過(guò)傳入的pathname獲取文件屬性

fstat通過(guò)用open打開(kāi)的文件的文件描述符獲取文件屬性

stat在操作軟鏈接文件時(shí)會(huì)獲取源文件的相關(guān)屬性

lstat在操作軟鏈接文件時(shí)會(huì)獲取鏈接文件的相關(guān)屬性

成功返回0,失敗返回-1,并設(shè)置錯(cuò)誤號(hào)

相關(guān)結(jié)構(gòu)體

struct stat {

?????????????? dev_t???? st_dev;???????? /* ID of device containing file */

?????????????? ino_t???? st_ino;???????? /* Inode number */

?????????????? mode_t??? st_mode;??????? /* File type and mode */

?????????????? nlink_t?? st_nlink;?????? /* Number of hard links */

?????????????? uid_t???? st_uid;???????? /* User ID of owner */

?????????????? gid_t???? st_gid;???????? /* Group ID of owner */

?????????????? dev_t???? st_rdev;??????? /* Device ID (if special file) */

?????????????? off_t???? st_size;??????? /* Total size, in bytes */

?????????????? blksize_t st_blksize;???? /* Block size for filesystem I/O */

?????????????? blkcnt_t? st_blocks;????? /* Number of 512B blocks allocated */

?????????????????????????????????? /* Since Linux 2.6, the kernel supports nanosecond

????????????????? precision for the following timestamp fields.

????????????????? For the details before Linux 2.6, see NOTES. */

?????????????? struct timespec st_atim;? /* Time of last access */

?????????????? struct timespec st_mtim;? /* Time of last modification */

?????????????? struct timespec st_ctim;? /* Time of last status change */

?????????? #define st_atime st_atim.tv_sec????? /* Backward compatibility */

?????????? #define st_mtime st_mtim.tv_sec

?????????? #define st_ctime st_ctim.tv_sec

?????????? };

1、文件類(lèi)型(可以用以下的宏確定文件類(lèi)型,這些宏的參數(shù)都是struct stat結(jié)構(gòu)中的ts_mode成員)

S_ISREG(m)? is it a regular file?

S_ISDIR(m)? directory?

S_ISCHR(m)? character device?

S_ISBLK(m)? block device?

S_ISFIFO(m) FIFO (named pipe)?

S_ISLNK(m)? symbolic link? (Not in POSIX.1-1996.)

S_ISSOCK(m) socket? (Not in POSIX.1-1996.)

2、文件權(quán)限

?????? 存放在st_mode低9位,從高位到低位分別表示用戶(hù)權(quán)限、同組用戶(hù)權(quán)限、其它用戶(hù)權(quán)限,該位為1表示有權(quán)限,0表示沒(méi)有權(quán)限

3、鏈接數(shù)

直接通過(guò)st_nlink得到

4、文件所有者

getpwuid函數(shù)相關(guān)操作得到

5、文件所屬組

getgrgid函數(shù)相關(guān)操作得到

6、文件字節(jié)大小

直接通過(guò)st_size得到

7、文件更新時(shí)間

ctime(&st_ctime)得到文件的更新時(shí)間

#include <stdio.h>
#include <sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<pwd.h>
#include<grp.h>
#include<time.h>
int main(int argc, char *argv[])
{
?  if(2!=argc)
? ? {
? ? ? ? printf("error\n");
? ? }
? ? struct stat st;
? ? lstat(argv[1],&st);
? ? if(S_ISREG(st.st_mode))
? ? ? ? printf("-");
? ? else if (S_ISDIR(st.st_mode))
? ? ? ? printf("d");
? ? else if(S_ISLNK(st.st_mode))
? ? ? ? printf("l");
? ? int i=8;
? ? for ( ; i >= 0; i-=3)
? ? {
? ? ? ? if(st.st_mode&1<<i!=0)
? ? ?  ? ? printf("r");
? ? ? ? else
? ? ? ? ? ? printf("-");

? ? ? ? if(st.st_mode&1<<(i-1)!=0)
? ? ? ? ? ? printf("w");
? ? ? ? else
? ? ? ? ? ? printf("-");
? ? ? ? if(st.st_mode&1<<(i-2)!=0)
? ? ? ? ? ? printf("x");
? ? ? ? else
? ? ? ? ? ? printf("-");

? ? }
//用戶(hù)名
? ? struct passwd *pw=getpwuid(st.st_uid);
//鏈接數(shù)? ? 
printf(" %ld",st.st_nlink);
? ? printf(" %s ",pw->pw_name);
struct group *gr =getgrgid(st.st_gid);
//用戶(hù)組名? ? 
printf( "%s",gr->gr_name);
//長(zhǎng)度? ? 
printf(" %ld",st.st_size);
? ? char arr[100]={0};
//獲取時(shí)間
? ? strcpy(arr,ctime(&st.st_mtime));
? ? if(arr[strlen(arr)-1]=='\n')
? ?     arr[strlen(arr)-1]='\0';
? ? printf(" %s ",arr);
? ? puts("");
? ? return 0;

}

2、目錄文件函數(shù)

??? 1opendir

?????? 作用:

?????????? 打開(kāi)一個(gè)目錄文件

?????? 頭文件

?????????? #include<sys/types.h>

?????????? #include<dirent.h>

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

?????????? DIR *opendir(const char *name)

?????? 參數(shù):

?????????? name:目錄文件

?????? 返回值:

?????????? 成功返回目錄流指針,失敗返回 NULL并設(shè)置錯(cuò)誤號(hào)。

IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取,算法,linux,文件IO

??? 2、readdir

??? 作用:

?????? 讀取目錄當(dāng)中一個(gè)文件的屬性

??? 頭文件:

?????? dirent.h

??? 函數(shù)文件

?????? struct dirent *readdir(DIR * dirp);

??? 參數(shù):

?????? dirp:想要操作的目錄流指針

??? 返回值:

?????? 成功返回讀取到的文件的相關(guān)信息的地址,被保存在一個(gè)struct dirent結(jié)構(gòu)體中,失敗或者讀完了所有文件的返回NULL。

相關(guān)結(jié)構(gòu)體:

struct dirent {

?? ? ? ? ? ? ? ino_t ? ? ? ?? d_ino; ? ? ? /* Inode number */

?? ? ? ? ? ? ? off_t ? ? ? ?? d_off; ? ? ? /* Not an offset; see below */

?? ? ? ? ? ? ? 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]; /* Null-terminated filename */

?? ? ? ? ? };

?

?????? 3、closedir

?????? 作用:

?????? ?????? 關(guān)閉目錄流指針

?????? 頭文件:

?????? ?????? #include <sys/types.h>

??? ????????????? #include <dirent.h>

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

?????? ?????? int closedir(DIR *dirp);

?????? 參數(shù):

?????? ?????? dirp:目錄流指針

?????? 返回值:

?????? 成功返回0,失敗返回-1并設(shè)置錯(cuò)誤號(hào)

IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取,算法,linux,文件IO

IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取,算法,linux,文件IO文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-671196.html

到了這里,關(guān)于IO線(xiàn)程,文件IO(open),文件(stat)與目錄(opendir)屬性的讀取的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • mv: 無(wú)法獲取“/opt/module/hadoop/logs/hadoop-atguigu-nodemanager-hadoop102.out.1“ 的文件狀態(tài)(stat): 沒(méi)有那個(gè)文件或目錄

    mv: 無(wú)法獲取“/opt/module/hadoop/logs/hadoop-atguigu-nodemanager-hadoop102.out.1“ 的文件狀態(tài)(stat): 沒(méi)有那個(gè)文件或目錄

    最近在回顧之前做過(guò)的離線(xiàn)數(shù)倉(cāng)項(xiàng)目,在啟動(dòng)hadoop時(shí)出現(xiàn)了如下錯(cuò)誤: 經(jīng)過(guò)一些資料搜集發(fā)現(xiàn)問(wèn)題的根本原因在于/opt/module/hadoop/etc/hadoop/目錄下的workers文件配置出現(xiàn)錯(cuò)誤。 文件內(nèi)容不能夠包含localhost 我原本的文件配置如下: 修改后配置如下: 我們簡(jiǎn)單解釋一下workers文件的

    2024年02月05日
    瀏覽(22)
  • 文件IO,目錄IO的學(xué)習(xí)

    文件IO,目錄IO的學(xué)習(xí)

    用法:#include“head.h”? ? -? ? ?在當(dāng)前目錄下尋找頭文件 主函數(shù)的傳參中,argc是傳參的個(gè)數(shù)? ,const char?*argv[]是一個(gè)指針數(shù)組,存放的指針類(lèi)型數(shù)據(jù) argv【n】,n=1/2/3 分別代表三個(gè)指針參數(shù) 標(biāo)準(zhǔn)示例: ? ??off_t lseek(int fd, off_t offset, int whence); ? ? ? ?功能: ? ? ? ? ? ?

    2024年02月20日
    瀏覽(19)
  • 目錄打開(kāi)顯示提示文件或目錄損壞且無(wú)法讀取、文件或目錄損壞且無(wú)法讀取的破解之道

    目錄打開(kāi)顯示提示文件或目錄損壞且無(wú)法讀取、文件或目錄損壞且無(wú)法讀取的破解之道

    ? ? 咱們?cè)谄饺展ぷ鲿r(shí),通常都會(huì)將資料放進(jìn)不同的目錄中,方便咱們找到,隨著時(shí)間的推移就會(huì)產(chǎn)生有越來(lái)越多目錄。最近有位用戶(hù)了這樣一個(gè)問(wèn)題,就是目錄無(wú)論怎么都無(wú)法打開(kāi),這樣就無(wú)法瀏覽、使用里面的資料了,影響到了咱們的正常使用,那目錄文件或目錄損壞且

    2024年02月02日
    瀏覽(40)
  • Open3D讀取文件

    Open3D讀取文件

    Open3D可以讀取點(diǎn)云文件,三角網(wǎng)格文件,也可以讀取圖片。具體方法如下: 一、點(diǎn)云文件操作 ????????Open3D支持的文件格式有xyz,xyzn,xyzrgb,pts,ply,pcd等文件。讀取的方式也非常簡(jiǎn)單。data = o3d.io.read_point_cloud(\\\"文件名“) 1、讀寫(xiě)文件 ????????函數(shù)原型如下: ???

    2024年02月08日
    瀏覽(22)
  • IO流讀取上傳文件的內(nèi)容

    IO流讀取上傳文件的內(nèi)容

    ?

    2024年01月21日
    瀏覽(18)
  • 【文件IO】Linux 文件操作(一) —— 遍歷指定目錄下的所有文件

    【文件IO】Linux 文件操作(一) —— 遍歷指定目錄下的所有文件

    目錄 一、訪(fǎng)問(wèn)目錄相關(guān)函數(shù) 1、打開(kāi)/訪(fǎng)問(wèn)目錄 (opendir / fdopendir) 2、讀取目錄內(nèi)容 (readdir) 3、關(guān)閉目錄 (closedir) 二、遍歷指定目錄下的所有文件 opendir / fdopendir 函數(shù)的作用是訪(fǎng)問(wèn)指定路徑的目錄,函數(shù)聲明如下: (1) opendir opendir 函數(shù)是通過(guò)用戶(hù)提供的目錄路徑來(lái)訪(fǎng)問(wèn)目錄, 參

    2024年02月04日
    瀏覽(23)
  • 【Linux操作系統(tǒng)】Linux系統(tǒng)編程實(shí)現(xiàn)遞歸遍歷目錄,詳細(xì)講解opendir、readdir、closedir、snprintf、strcmp等函數(shù)的使用

    【Linux操作系統(tǒng)】Linux系統(tǒng)編程實(shí)現(xiàn)遞歸遍歷目錄,詳細(xì)講解opendir、readdir、closedir、snprintf、strcmp等函數(shù)的使用

    在Linux系統(tǒng)編程中,經(jīng)常需要對(duì)目錄進(jìn)行遍歷操作,以獲取目錄中的所有文件和子目錄。遞歸遍歷目錄是一種常見(jiàn)的方法,可以通過(guò)使用C語(yǔ)言來(lái)實(shí)現(xiàn)。本篇博客將詳細(xì)介紹如何使用C語(yǔ)言實(shí)現(xiàn)遞歸遍歷目錄的過(guò)程,并提供相應(yīng)的代碼示例,同時(shí)解釋相關(guān)函數(shù)的使用。 1.1.1 函數(shù)

    2024年02月12日
    瀏覽(26)
  • JavaEE & 文件操作和IO & 目錄掃描全文檢索小程序

    JavaEE & 文件操作和IO & 目錄掃描全文檢索小程序

    不知道說(shuō)啥了,看看吧 在之前的學(xué)習(xí)中,基本上都是圍繞內(nèi)存展開(kāi)的~ MySQL 主要是操作硬盤(pán)的 文件IO也是是操作硬盤(pán)的~ IO : i nput o utput 創(chuàng)造文件,刪除文件,重命名文件,創(chuàng)建目錄······ 一些操作沒(méi)有權(quán)限也做不了~ 1.1 路徑 就是我們的文件系統(tǒng)上的一個(gè)文件/ 目錄 的具

    2023年04月09日
    瀏覽(19)
  • 【JavaEE】文件操作和IO-目錄掃描全文檢索小程序

    【JavaEE】文件操作和IO-目錄掃描全文檢索小程序

    不知道說(shuō)啥了,看看吧 在之前的學(xué)習(xí)中,基本上都是圍繞內(nèi)存展開(kāi)的~ MySQL 主要是操作硬盤(pán)的 文件IO也是是操作硬盤(pán)的~ IO : i nput o utput 創(chuàng)造文件,刪除文件,重命名文件,創(chuàng)建目錄······ 一些操作沒(méi)有權(quán)限也做不了~ 1.1 路徑 就是我們的文件系統(tǒng)上的一個(gè)文件/ 目錄 的具

    2024年02月09日
    瀏覽(19)
  • 051-WEB攻防-前后臺(tái)功能點(diǎn)&文件下載&文件讀取&文件刪除&目錄遍歷&目錄穿越

    051-WEB攻防-前后臺(tái)功能點(diǎn)&文件下載&文件讀取&文件刪除&目錄遍歷&目錄穿越

    1、文件安全-前后臺(tái)功能點(diǎn)-下載讀取刪除 2、目錄安全-前后臺(tái)功能點(diǎn)-目錄遍歷目錄穿越 演示案例: ?文件安全-下載刪除-案例黑白盒 ?目錄安全-遍歷穿越-案例黑白盒 1、下載=讀?。ǐ@取源碼) 文件下載 利用:下載敏感文件(數(shù)據(jù)庫(kù)配置,中間件配置,系統(tǒng)密匙等文件信息

    2024年03月10日
    瀏覽(68)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包