/usr/src/bin/ls/ls.c
2009-05-13 01:52:45来源:未知 阅读 ()
由于代码太多,不在这里列出了,只谈谈学习的感想。
首先用
isatty
(STDOU_FILENO)检测标准输出是否是tty终端。当标准输出是tty终端时,ls的许多参数是默认的。
当标准输出是tty终端时,首先会检测COLUMNS环境变量,若设置了该变量,则将它转换成int termwidth终端宽度。在转换的时候用了很奇怪的atoi函数。atoi函数已经被推荐不要再使用了,为什么NB还用它呢?继续查源代码,发现在NB中atoi函数其实是return((int)strtol(str, (char **)NULL, 10));仅为strtol在10进制下的包装函数而已。保留这个函数可能是为了兼容老代码。
若没设置COLUMNS环境变量,则调用ioctl函数获取当前tty终端参数并设置termwidth。
若标准输出不是tty终端,则单栏输出。
接下来设置root用户的默认参数。-A。
由于ls调用getopt函数处理参数,因此若给定的参数文件名以-开头,则将出错。处理方法是加./(忘记是在哪里看到了)。
处理完参数,根据指定的参数选择对应的输出函数。然后开始一一处理参数中的文件。
遍历文件有一个很有用的函数库
fts
,说来惭愧,这还是第一次听说这个函数。fts_open函数中有个参数是一个指向函数的指针,它指向一个比较函数,以此决定按何种顺序来遍历文件(夹)。具体的各种比较函数在cmp.c里。
遍历-》显示。结束。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1210/showart_59957.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:FB磁盘空间的限额
- tar 命令帮助 2009-05-13
- 调整FreeBSD参数 2009-05-13
- Extmail/Extman配置文件参数说明 2009-05-13
- Squid请求处理的典型流程 2009-05-13
- loader.conf rc.conf sysctl.conf make.conf src.conf 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash