/usr/src/bin/ls/ls.c

2009-05-13 01:52:45来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

值得学习的函数有isatty、ioctl、fts函数库。
由于代码太多,不在这里列出了,只谈谈学习的感想。
  首先用
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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD读书笔记—5存储器管理—5.1术语

下一篇:FB磁盘空间的限额