歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> 基礎學習Unix操作系統環境高級程序設計

基礎學習Unix操作系統環境高級程序設計

日期:2017/3/6 11:42:28   编辑:Unix資訊

今天,我們來學習Unix操作系統環境高級程序設計入門知識,關於目錄部分的知識。這部分是Unix操作系統環境高級程序設計的基礎知識,希望大家可以好好的學習。

不管是何種操作系統,一提到其中的文件系統首先想到的自然是目錄和文件。在Unix操作系統中一切皆可視為文件,目錄是一種特殊的文件。

在已發表的《Unix操作系統的入門與基礎》一文中,曾介紹過用戶主目錄、工作目錄以及絕對路徑、相對路徑的概念,我們也已經知道了使用pwd命令可以獲得當前工作目錄的絕對路徑,那麼如何在程序中實現類似於pwd命令的功能呢?這裡需要用到getcwd()函數,它的定義是:

  1. #include <unistd.h>
  2. char* getcwd(char* buf, size_t size); //成功返回buf,失敗返回NULL


此函數中的第一個參數buf數組用於存放當前工作目錄路徑名的字符串,size是指這個buf數組最多能裝多少數據,而函數返回值與放入buf中的內容是相同的。要注意的是,Unix操作系統該緩存必須有足夠的長度以容納絕對路徑名再加上一個“/0”終止字符,否則將會返回出錯。

對於Unix操作系統目錄的操作,最常見的就是打開目錄、讀取目錄信息、關閉目錄,與之對應的函數分別是:

  1. #include <sys/types.h>
  2. #include <dirent.h>
  3. DIR* opendir(const char* dirname); //成功時返回指針,失敗返回NULL
  4. struct dirent* readdir(DIR* dirp); //成功時返回指針,失敗返回NULL
  5. int closedir(DIR* dirp); //成功時返回0,失敗返回-1


使用opendir()函數打開不存在的目錄或者對目錄沒有訪問權限,以及對普通文件使用此函數都將返回NULL。opendir()函數成功操作後將返回指向DIR結構的指針,而Unix操作系統DIR結構用來保存被讀取目錄的相關信息。定義在頭文件<dirent.h>中的dirent結構最常用到的成員是d_name,它可以保存文件名。

現來看下面的一個例程序:
[程序1]

  1. #include <iostream>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <dirent.h>
  5. #include <errno.h>
  6. using namespace std;
  7. int main()
  8. {
  9. DIR* dp;
  10. cout << " Please enter a dir name: ";
  11. char name[255];
  12. memset(name,0x00,255);
  13. cin >> name;
  14. cout << " ----------------- " << endl;
  15. dp = opendir(name);
  16. if(dp == NULL)
  17. {cout << errno << " [" <<strerror(errno) << "]" << endl;
  18. return -1;}
  19. dirent* dirp;
  20. while((dirp = readdir(dp))!= NULL)
  21. {cout << dirp->d_name << endl;}
  22. closedir(dp);
  23. return 0;}


在Unix操作系統中,一旦出現程序執行失敗的情況,系統會自動設置一個名為errno的全局變量,用於記錄錯誤的出錯ID號。使用strerror(errno)可以獲得指定錯誤的描述信息,不過在此之前一定要包含errno.h的頭文件。

編譯執行程序1時,如果輸入一個已存在且有訪問權限的目錄名,程序會列出此目錄下的所有子目錄名以及文件名;如果輸入的是一個文件名,則會輸出20 [Not a directory];如果輸入的是一個不存在的目錄名,則會輸出2 [No such file or directory]。

以上,我們就對Unix操作系統環境高級程序設計目錄部分的知識學習完了,希望大家可以哈哈的鞏固基礎知識。

Copyright © Linux教程網 All Rights Reserved