【问题标题】:Read from last line in file to first in C [duplicate]从文件中的最后一行读取到 C 中的第一行 [重复]
【发布时间】:2013-03-12 04:47:43
【问题描述】:

我正在尝试在 C 中实现一个 shell。事情是这样的。我想做一个历史友好的功能,如果我按下它就会转到上一个。命令。

现在我有一个存储历史记录的文件,比如 history.txt。当我执行命令时,我会将命令附加到文本中。并将某种偏移量重置为文件的最后一行。

我需要一种方法来找到最后一行并根据命令逐行上移。并根据命令一一上移。

现在,我的一个想法是 fgets() 直到 -1 还是什么?

关于我应该如何开始的任何想法?

edit:我可以想到一个使用数组的解决方案。但是有没有一种方法可以让我几乎不用空间?

【问题讨论】:

  • 将历史文件读入内存并拥有一个指向每个条目的指针数组?
  • 我认为双循环链表会很好,但内存成本可能很高。

标签: c shell file-io operating-system


【解决方案1】:

当您需要运行上一个命令时,不要费心从文件中读取历史记录。只需将先前的命令存储在内存中即可。退出时将它们写入磁盘,并在启动时加载它们。这就是真正的 shell 的工作原理。

【讨论】:

  • 那么像一个数组?我认为您可以使用循环缓冲区,但如果文件很大,它可能会导致内存溢出
  • 不需要循环缓冲区,如果您想修剪它,只需一个链表就可以了,如果您将始终保留所有历史记录,则只需一个普通数组(让我们面对现实,如果用户用尽通过键入命令来记忆,其他的东西是错误的)。保存时可以修剪到N行,或者丢弃重复项等。
  • 谢谢。这有很大帮助,但遗憾的是我不能这么快接受答案。 :[
  • 我要补充一点,您可能应该定期将您的内存结构刷新到磁盘,这样您就不会丢失您的历史记录,以防 shell 崩溃或意外关闭。
猜你喜欢
  • 2023-03-09
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2010-09-06
  • 1970-01-01
相关资源
最近更新 更多