- 论坛徽章:
- 0
|
用过ls -a的朋友都知道,它会把所有文件按顺序竖着排列,为了说明问题,例子很长。
- . askjflksjdfjdklfj csdflshdfjhf esjfljsdlfjsldjflsdjfljsdlkfjlsdfk
- .. bslkdfjlksdfklkldsdjk d
复制代码
以上分四栏,每栏的长度是该栏最大文件名的长度。例如,第二栏最大长度是“bslkdfjlksdfklkldsdjk“的长度,第三栏长度是“csdflshdfjhf“的长度。
我原来以为它是通过预先定义分几栏,每一栏文件名的指针用一个数组或链表保存,比如分三栏的话,保存到a1[max],a2[max],a3[max]等,然后
- int i;
- for(i=0;i<max;i++)
- {
- printf("%s %s %s",a1[i],a2[i],a3[i])
- }
复制代码
- . csdflshdfjhf
- .. d
- askjflksjdfjdklfj esjfljsdlfjsldjflsdjfljsdlkfjlsdfk
- bslkdfjlksdfklkldsdjk flsjflsjfljsdlkfjlksdjfljlklskdjflsdjflksdfklj
复制代码
- . d
- .. esjfljsdlfjsldjflsdjfljsdlkfjlsdfk
- askjflksjdfjdklfj flsjflsjfljsdlkfjlksdjfljlklskdjflsdjflksdfklj
- bslkdfjlksdfklkldsdjk g
- csdflshdfjhf
复制代码
很显然,结果并不像我想的那样,这确实是竖着,一栏一栏来输出的。我通过阅读ls的源代码,发现它包含termios.h头文件,好的,它可以竖着输出,即便那样,它怎样知道一栏输出3个文件还是四个文件好!
- . csdflshdfjhf g
- .. d h
- askjflksjdfjdklfj esjfljsdlfjsldjflsdjfljsdlkfjlsdfk i
- bslkdfjlksdfklkldsdjk flsjflsjfljsdlkfjlksdjfljlklskdjflsdjflksdfklj
复制代码
我仔细想了一下它的流程,假设它有一大堆文件名要输出,它可以竖着输出,首先它要判断竖着输出多少个文件名合适,如果确定了第一栏的输出个数,后面各栏输出的文件名个数就确定了。
第一栏输出的文件名个数如何确定,或者termios.h文件有别的神奇的功能? |
|