91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SylixOS文件狀態獲取

發布時間:2020-06-19 11:38:15 來源:網絡 閱讀:572 作者:時尚小烏龜 欄目:開發技術


  1. 文件狀態介紹

    SylixOS中文件的狀態信息包含在stat結構體中,其中包含了文件大小,設備標識符,用戶標識符,用戶組標識符,文件模式,擴展屬性,文件讀取或修改的時間戳,鏈接數量,指向存儲該內容的磁盤區塊的指針,文件分類等等。

    SylixOS中維護的stat結構體如圖 1.1所示。

    SylixOS文件狀態獲取

    1.1 stat結構體成員

  2. 文件狀態獲取函數

  3. 文件狀態獲取函數介紹

    SylixOS中獲取文件狀態可以使用stat、lstat和fstat等函數。如圖 2.1所示。

    SylixOS文件狀態獲取

    2.1獲取文件狀態函數原型

    函數fstat原型分析:成功返回0,失敗返回-1,并設置錯誤號。參數iFd是文件描述符,輸出參數pstat返回文件狀態信息。

    函數stat原型分析:成功返回0,失敗返回-1,并設置錯誤號。參數pcName是文件名,輸出參數pstat返回文件狀態信息。

    函數lstat原型分析:成功返回0,失敗返回-1,并設置錯誤號。參數pcName是文件名,輸出參數pstat返回文件狀態信息。

    stat函數類似于lstat函數,區別是當傳入的文件名是符號鏈接時,lstat函數將獲得符號鏈接的相關信息,而不是符號鏈接指向的實際的文件的信息。

  4. 目錄下全文件狀態獲取

    獲取目錄下所有文件的狀態信息,需要涉及到對當前目錄以及子目錄的讀寫操作。

    在使用opendir函數打開一個目錄文件之后,使用readdir函數來獲取一個已經打開目錄的單條信息。所以為了獲取目錄下及其子目錄下所有文件信息的時候,需要多次調用readdir函數來讀取目錄信息,readdir函數執行失敗返回NULL,成功返回dirent結構體指針,dirent結構體成員如圖 2.2所示。

     

    SylixOS文件狀態獲取

    2.2 dirent結構體成員

    成員變量d_name保存了文件名信息,但是需要注意的是,此文件名不可以直接用作stat或lstat函數的pcName參數傳入,否則調用容易失敗。原因是因為d_name返回的文件名是不帶路徑的一個字符串,當調用stat或者lstat獲取非當前目錄文件的狀態信息時,由于當前目錄沒有發生改變,傳入非當前目錄下的文件名則失敗。所以可以通過字符拼接構造出正確的相對或者絕對路徑傳入stat或者lstat函數,完成對所有目錄下文件狀態的獲取工作。

    下面的程序完成了對傳入的路徑下所有文件狀態中文件類型的打印。見程序清單 2.1。

     

    程序清單 2.1實例代碼


    #include<stdio.h>
    #include<unistd.h>
    #include<fcntl.h>
    #include<sys/stat.h>
    #include<string.h>
    /*********************************************************************************************************
    ** 函數名稱: printdir
    ** 功能描述: 遍歷當前目錄下的文件和目錄并通過控制臺輸出顯示
    ** 輸 入 : 目錄路徑
    ** 輸 出 :
    ** 全局變量:
    ** 調用模塊:
    *********************************************************************************************************/
    void printdir (char *path)
    {
        DIR *dir = NULL;
        struct dirent *entry = NULL;
        struct stat statbuf = {0};
     
        dir = opendir(path);
        if (!dir) {
            printf("failed to open current directory!\n");
            return ;
        }
     
        while(1) {
            entry = readdir(dir);
            if (entry == NULL){
                break;
            }else{
                intret = 0;
                charpath3[50] = {0};
                strcpy(path3, path);
     
                /*
                 * 路徑拼接
                 */
                strcat(path3, entry->d_name);
                strcat(path3, "/");
                ret = lstat(path3, &statbuf);
                if (ret) {
                 printf("err!\n");
                 break;
                }
     
                if(S_ISDIR(statbuf.st_mode)){
                    printf("Dir:%s\n", path3);
                    /*
                     * 遞歸調用
                     */
                    printdir(path3);
                }else{
                    printf("File:%s\n", path3);
                }
            }
     
        }
        closedir(dir);
    }
     
     
    int main (int argc, char **argv)
    {
        printdir(argv[1]);
     
        return (0);
    }



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

盖州市| 石景山区| 抚顺市| 庆阳市| 延津县| 都匀市| 广安市| 茶陵县| 金乡县| 平湖市| 广平县| 昭平县| 松江区| 双流县| 峨山| 江都市| 哈巴河县| 哈尔滨市| 宜良县| 武安市| 微山县| 宜都市| 合山市| 通山县| 老河口市| 泉州市| 卫辉市| 廉江市| 岑溪市| 怀集县| 亳州市| 辽阳市| 包头市| 资阳市| 章丘市| 太谷县| 镇远县| 浦城县| 八宿县| 双鸭山市| 阆中市|