基础学习Unix操作系统环境高级程序设计
创始人
2024-06-27 22:30:43
0次

今天,我们来学习Unix操作系统环境高级程序设计入门知识,关于目录部分的知识。这部分是Unix操作系统环境高级程序设计的基础知识,希望大家可以好好的学习。

不管是何种操作系统,一提到其中的文件系统首先想到的自然是目录和文件。在Unix操作系统中一切皆可视为文件,目录是一种特殊的文件。

在已发表的《Unix操作系统的入门与基础》一文中,曾介绍过用户主目录、工作目录以及绝对路径、相对路径的概念,我们也已经知道了使用pwd命令可以获得当前工作目录的绝对路径,那么如何在程序中实现类似于pwd命令的功能呢?这里需要用到getcwd()函数,它的定义是:
   
 

  1. #include  
  2. char* getcwd(char* buf, size_t size);  //成功返回buf,失败返回NULL   

   
此函数中的***个参数buf数组用于存放当前工作目录路径名的字符串,size是指这个buf数组最多能装多少数据,而函数返回值与放入buf中的内容是相同的。要注意的是,Unix操作系统该缓存必须有足够的长度以容纳绝对路径名再加上一个“/0”终止字符,否则将会返回出错。

对于Unix操作系统目录的操作,最常见的就是打开目录、读取目录信息、关闭目录,与之对应的函数分别是:

  1. #include  
  2. #include  
  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结构最常用到的成员是d_name,它可以保存文件名。

现来看下面的一个例程序:
[程序1]

  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5. #include  
  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 << " [" <
  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操作系统环境高级程序设计目录部分的知识学习完了,希望大家可以哈哈的巩固基础知识。

【编辑推荐】

  1. Unix操作系统上机基本操作解说
  2. 实现Unix操作系统终端打印
  3. 举例说明Unix操作系统维护问题
  4. Unix操作系统命令行知识讲解
  5. ***解析Unix操作系统中sar命令

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...