gpt4 book ai didi

c - ls 在 C 中的实现

转载 作者:行者123 更新时间:2023-11-30 17:55:49 26 4
gpt4 key购买 nike

我用 C 语言编写了一个程序,其功能与 ls, ls-l, ls-a 相同。在 UNIX 中。现在我想做的是以与原始 ls 相同的方式打印数据(在具有 1 个空格距离的列中)。我知道我需要使用 printf("%*s",size,string)制作列时,但列的大小取决于列中最长的单词。我怎样才能做到简单呢?我唯一的想法是首先,收集某种结构中的所有数据,然后检查最长的元素并将长度保存到变量中,这将是列的大小。

最佳答案

我刚刚在 GNU coreutils 中查找了它是如何实现的,这基本上就是实现它的方法。

有一种极端情况,算法一次只打印一行:您要求每行一个条目,进行了非递归搜索,要求不对条目进行排序,并且您没有明确告诉 ls使用一定的 block 大小。

在所有其他情况下,它基本上都会执行您指定的操作。对于该结构,我建议您慷慨地分配一个结构数组,并在用完时以指数方式重新分配。如果您遇到内存短缺,或者如果您从一开始就决定要节省内存,您仍然可以将到目前为止已有的内容转储到屏幕上。

小附录 coreutils ls 甚至不使用 %*s,而是放置字符空格(我猜是为了古老/损坏的 libcs​​ 的可移植性),但两者都应该可以工作。

关于这个问题,有兴趣的话可以看看http://www.artfiles.org/gnu.org/coreutils/coreutils-8.20.tar.xz

关于c - ls 在 C 中的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13920967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com