快速业务通道

在UNIX下对文件与目录进行编程

作者 佚名技术 来源 操作系统 浏览 发布时间 2012-05-21
文件或子目录。

closedir:关闭相应的目录。

程序说明
该程序是一个类似于UNIX命令ls 的小工具(取文件名为lx,为了简单起见,此程序只读取了文件的字节数,即st_size)。它可以接受一个参数:指定的目录;也可以不带参数,则默认为当前目录。程序列出指定目录及其子目录中所包含的所有文件的文件名和文件的字节数,并计算出指定目录所占磁盘空间的大小。程序详细说明如下(程序清单见附录):

1-5行:包含在程序中要用到的一些头文件。

6行:定义常数TABSPACES为TAB键所跳过的空格数,用于规整后面显示语句的屏幕格式。

11行:定义一个变量dir_size用于存放指定目录所占磁盘空间的大小。

12、13行:判断命令行如果没有带参数,则调用list函数,将指定目录置为当前目录,并将返回的目录大小存入变量dir_size中。

14-18行:如果命令行带的参数大于一个,则在屏幕上显示出此命令的简要语法并退出程序。

19、20行:如果命令行只带一个参数,则将此参数作为指定目录调用list函数,同时也返回目录的大小并存入变量dir_size中。

21行:打印出指定目录及其子目录所占磁盘空间的大小。

23行:定义list函数,该函数采用递归法列出字符串name所指定的目录及其子目录中所包含的文件名和文件的大小,并计算name所指定的目录所占用的磁盘空间。

26-32行:定义函数中要用的变量并赋初值。

33行:打印当前所操作目录的目录名。

34行:开始一个循环次数为2的for循环。第1次循环找出目录中包含的所有文件,第2次循环找出目录中包含的所有子目录。

36-40行:打开指定的目录,如果打开成功则返回指向此目录的指针,否则返回NULL。程序打印出出错信息并退出。

41行:开始一个while循环,每循环一次读出目录中的一个文件或子目录,直到读出目录中所有的文件或子目录,readdir返回NULL表示已读到此目录的尾部。

43、44行:判断读出的文件的I标识号,如果为0,则表示该文件已被删除。程序继续执行并读取下一个文件。

45-47行:在读出的文件名前加上绝对或相对路径,以使程序能正确的从文件系统中访问指定的文件。

48-52行:调用lstat获取指定文件的信息,将获取的信息存储到结构sbuf中。如果出错则退出程序。

53行:判断读出的文件是否是一个目录,这个条件用语句(sbuf.st_mode&S_IFMT)==S_IFDIR实现。其它三个条件用于滤除符号链接、目录本身和上一级目录,以避免出现死循环。

55-60行:如果是第2次for循环则递归调用list函数,列出相应的子目录,同时累加目录所占磁盘空间的大小。

63-71行:如果是第1次for循环则打印出文件名和文件所占用的字节数,同时累加所占磁盘空间的大小。用三条打印语句是因为文件名长度不一致,为了打印出的屏幕美观。

75行:关闭相应的目录。

77行:返回本目录所占用的磁盘空间。

本程序在Turbo Linux 4.0和FreeBSD 3.0上调试运行通过。

参考资料:《UNIX系统程序员进阶》 林新观编著 清华大学出版社

《UNIX系统V/386第4版程序员参考手册》 电子工业出版社

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号