免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3138 | 回复: 2
打印 上一主题 下一主题

关于ls -a分栏的算法问题--主要是怎样判断应该分几栏? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-31 11:17 |只看该作者 |倒序浏览
用过ls -a的朋友都知道,它会把所有文件按顺序竖着排列,为了说明问题,例子很长。

  1. .   askjflksjdfjdklfj      csdflshdfjhf  esjfljsdlfjsldjflsdjfljsdlkfjlsdfk
  2. ..  bslkdfjlksdfklkldsdjk  d
复制代码

以上分四栏,每栏的长度是该栏最大文件名的长度。例如,第二栏最大长度是“bslkdfjlksdfklkldsdjk“的长度,第三栏长度是“csdflshdfjhf“的长度。
我原来以为它是通过预先定义分几栏,每一栏文件名的指针用一个数组或链表保存,比如分三栏的话,保存到a1[max],a2[max],a3[max]等,然后

  1. int i;
  2. for(i=0;i<max;i++)
  3. {
  4.    printf("%s %s %s",a1[i],a2[i],a3[i])
  5. }
复制代码


  1. .                      csdflshdfjhf
  2. ..                     d
  3. askjflksjdfjdklfj      esjfljsdlfjsldjflsdjfljsdlkfjlsdfk
  4. bslkdfjlksdfklkldsdjk  flsjflsjfljsdlkfjlksdjfljlklskdjflsdjflksdfklj
复制代码



  1. .                      d
  2. ..                     esjfljsdlfjsldjflsdjfljsdlkfjlsdfk
  3. askjflksjdfjdklfj      flsjflsjfljsdlkfjlksdjfljlklskdjflsdjflksdfklj
  4. bslkdfjlksdfklkldsdjk  g
  5. csdflshdfjhf
复制代码


很显然,结果并不像我想的那样,这确实是竖着,一栏一栏来输出的。我通过阅读ls的源代码,发现它包含termios.h头文件,好的,它可以竖着输出,即便那样,它怎样知道一栏输出3个文件还是四个文件好!

  1. .                      csdflshdfjhf                                    g
  2. ..                     d                                               h
  3. askjflksjdfjdklfj      esjfljsdlfjsldjflsdjfljsdlkfjlsdfk              i
  4. bslkdfjlksdfklkldsdjk  flsjflsjfljsdlkfjlksdjfljlklskdjflsdjflksdfklj
复制代码


我仔细想了一下它的流程,假设它有一大堆文件名要输出,它可以竖着输出,首先它要判断竖着输出多少个文件名合适,如果确定了第一栏的输出个数,后面各栏输出的文件名个数就确定了。

第一栏输出的文件名个数如何确定,或者termios.h文件有别的神奇的功能?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2008-10-31 12:10 |只看该作者
其实这个问题的关键在于确定可以分几栏,而确定这个有一个最笨的办法,那就是一个一个往下试,直到找到最大的栏数。

论坛徽章:
0
3 [报告]
发表于 2008-10-31 14:21 |只看该作者
那样的话,任何文件名集合都可以分一栏,就是竖着往下排。
栏数要尽量多,那样可以节省显示空间,而不是尽量少
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP