1. 程式人生 > >Linux 下顯示目錄內容的c語言程式

Linux 下顯示目錄內容的c語言程式

最近打算學學linux,看了看基礎的介紹感覺不明所以,目前在看《Linux程式設計》,看到第三章一個顯示目錄的程式,感覺C語言和linux簡直是天作之合,C語言提供很多底層的函式和一些庫函式,可以進行很多方便操作。再和SHELL配合起來對linux程式設計,確實很爽呀。

記錄一下今天的程式碼:

#include<unistd.h>
#include<stdio.h>
#include<dirent.h>
#include<string.h>
#include<sys/stat.h>
#include<stdlib.h>


void printdir(char *dir, int depth);

int main(int argc, char *argv[]) // 通過引數傳遞要顯示的目錄
{
    char *topdir = ".";
    if( argc >= 2 )
    {
       topdir = argv[1];
    }

    printf("Directory scan of %s\n", topdir);
    printdir(topdir,0);
    printf("done\n");

    return 0;
}

void printdir(char *dir, int depth) // depth表示每一層目錄的縮排長度
{
    DIR *dp; // 指向開啟的目錄
    struct dirent *entry; // dirent結構體的指標,指向讀取目錄中的每一個條目
    struct stat statbuf; // 儲存目錄中每個條目的狀態資訊

    if ((dp = opendir(dir)) == NULL) //判讀是否正確開啟目錄
    {
        fprintf(stderr,"cannot open the directory: %s \n", dir);
        return;
    }

    chdir(dir); // 進入指定顯示的目錄
    while((entry = readdir(dp)) != NULL)
    {
        lstat(entry->d_name, &statbuf);
        if(S_ISDIR(statbuf.st_mode)) //判斷當前目錄中的條目是否是是一個目錄,如果是就遞迴呼叫當前函式
        {
            if(strcmp(".", entry->d_name) == 0
                    | strcmp("..", entry->d_name) == 0)
            {
                continue;
            }
            printf("%*s%s/\n", depth, "", entry->d_name); //顯示目錄的名字,注意%*s的意義
            printdir(entry->d_name, depth+4);
        }
        else // 如果不是目錄就直接顯示該條目名字
        {
            printf("%*s%s/\n", depth, "", entry->d_name);
        }
    }
    chdir(".."); //結束遞迴
    closedir(dp);
}



相關推薦

Linux 顯示目錄內容c語言程式

最近打算學學linux,看了看基礎的介紹感覺不明所以,目前在看《Linux程式設計》,看到第三章一個顯示目錄的程式,感覺C語言和linux簡直是天作之合,C語言提供很多底層的函式和一些庫函式,可以進行很多方便操作。再和SHELL配合起來對linux程式設計,確實很爽呀。

linuxgcc程式設計06-c語言參考手冊

一。 c語言標準庫介紹 二。c語言參考案例  巨集定義 巨集是在gcc編譯預處理階段就會執行的程式碼   //#pragma命令可以讓程式設計者讓編譯器執行某些事 #include <stdio.h> //包含io流的庫 標準的輸入和輸出 ""首先在

linux,如何在C語言中使用正則表示式(整理)

  一個正則表示式的教程可以參看(裡面有個測試正則表示式的工具)      正則表達是用來匹配字串的好東東。       如果使用者熟悉Linux下的sed、awk、grep或vi,那麼對正則表示式這一概念肯定不會陌生。由於它可以極大地簡化處理字串時的複雜度,因此現 在已

linuxPing工具的C語言實現

前言:     ping命令是用來檢視網路上另一個主機系統的網路連線是否正常的一個工具     ping命令的工作原理是:向網路上的另一個主機系統傳送ICMP報文,如果指定系統得到了報文,它將把報文一模一樣地傳回給傳送者 ping實現的九大步驟:       第一步:建立i

Linux的主要的C語言編譯器

   大名鼎鼎的GNU的C/C++/Obj-C編譯器, 當前版本是2.8.1, 但據說與2.7.*有相容性     問題. 而使用較廣的是gcc 2.7.2系列, 如RedHat5中帶的就是gcc 2.7.2.3     有時候在Cyrix上用gcc會有些問題, 因此有一套針對Cyrix特點的gcc 2.7.

linux,如何在C語言中使用正則表示式

使用POSIX函式庫中的Regex系列函式來說明在Linux c下如何使用正則表示式 #include <stdio.h> #include <sys/types.h> #include <regex.h> #include <st

整理 Linux列出目錄內容的命令

在 Linux 中,有非常多的命令可以讓我們用來執行各種各樣的任務。當我們想要像使用檔案瀏覽器一樣列出一個目錄下的內容時,大家第一時間想到的是 `ls` 命令。但只有 ls 命令能實現這個目的嗎?顯然不是。 下面,良許就給大家介紹Linux下列出目錄內容的一些命令,一起來看看吧。 #### ls Lin

Linux(Ubuntu16.04)編寫執行C語言程式

       最初學習C語言用的是Visual C++6.0,後來還用過一些IDE,複製貼上都可以用滑鼠對目標進行選擇即可。但在Linux系統裡,需要熟練掌握在Terminal裡編寫C語言程式,進行編譯除錯。本章

LinuxC語言程式的除錯

1.編譯時新增除錯資訊 使用gcc -g -o [生成檔名] [原始檔名]來編譯生成一個帶除錯資訊的可執行檔案 例如:gcc -g -o test.debug test.c 加上-g選項以後,gcc在編譯是會做以下額外的操作: 建立符號表,符號表包含了程式

第一個linuxc語言程式

當然是列印hello world啦。  1.vim helloworld.c如下: #include <stdio.h> int main() { char *c; c = "hello world!"; printf("%s\n",c

C語言程式的編譯、連結具體過程及Linux環境的具體例項

我們知道一個C語言程式從編寫完成到生成可執行檔案分為預處理、編譯、彙編、連結,最後再生成可執行檔案。 預處理階段 前處理器主要做四部分工作,分別是:標頭檔案展開、巨集替換、去註釋以及條件編譯。 (1)標頭檔案展開就是編譯器會根據字元#開頭的命令去讀取相

linux用gcc編譯c程式時遇到的問題: error: stdio.h: 沒有那個檔案或目錄

原因是沒有安裝libc6-dev的軟體包。命令列下輸入apt-get install build-essential即可。這個build-essential是幹什麼的呢?原來build-essential是一個列表,包含了編譯debian包必需的大部分元件。安裝完之後,順利解

Linux系統除錯 C語言程式(使用gdb)

問題描述:Linux 系統下用C語言寫 的指令碼程式,程式執行時出現未知錯誤需要除錯找出問題所在地。(阿里雲Ubuntu系統的伺服器)。 解決方法:使用 gdb工具在終端視窗中除錯 C檔案。 具體方法: (1)安裝 gdb  sudo apt-get install

C語言程式Linux執行

市面上常見的Linux都是發行版本,典型的Linux發行版包含了Linux核心、桌面環境和各種常用的必備工具,國內使用較多的是Ubuntu(烏班圖)、CentOS、Deepin(深度Linux)。本教程以Deepin為例來講述如何編譯C程式。 Gedit Gedit是一個簡單實用的文字編輯器,擁有漂亮的介面

linux顯示隱藏目錄或隱藏文件占用空間大小

du -sh linux du linux下顯示隱藏目錄或隱藏文件占用空間大小du -sh .[!.]*cd .pyenvdu -sh *cd versions/root@10-10-90-115:/# cd /data/home/wangting/root@10-10-90-115:/data/

Linux使用gdb除錯C/C++程式

在筆者工作實踐中,使用gdb除錯C++程式和除錯C程式,他們稍有不同,下面是使用總結。 一、編譯選項 -g         生成除錯資訊 -gstabs+   以stabs格式生成除錯資訊,並且包含僅供gdb使用的額外除錯資訊生成除

UbuntuGDB除錯C語言程式

轉自:http://zhgeaits.me/other/2013/03/17/gdb-study-notes.html,感謝博主。 1.GDB是什麼 GDB是GNU開源組織釋出的一個UNIX下的程式除錯工具,專門用來除錯C,C++這些程式的了,而且都是命令列模式的。 2.準備工作 平

Linux核心完全註釋 閱讀筆記:3.3、C語言程式

By: Ailson Jack Date: 2018.09.14 本小節給出核心中經常用到的一些gcc擴充語句的說明。 1、C程式編譯和連結          使用gcc編譯器編譯C語言程式時,通常會經過4個處理階段,即預處理階段、編譯階段、彙編階段和連結階段

ubuntu編寫並執行第一個c語言程式

對於初入Ubantu系統的小夥伴來說,進入Ubuntu最想做的事莫過於在終端(Terminal)裡執行自己的第一個C/C++程式"hello.c/hello.cpp"了。 Ubuntu預設是不包含編輯器vim和編譯器gcc。如果你是剛安裝好的Ubuntu電腦,下面我們將

linux顯示中文目錄和檔名

選擇一個一勞永逸的方法,就是修改/etc/下的fstab檔案,我的fstab內容如下: /dev/hda9 / ext2 defaults 1 1 /dev/hda8 /boot ext2 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0