gpt4 book ai didi

c - 如何在编辑行中追加历史记录?

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:03 27 4
gpt4 key购买 nike

我正在尝试向 MacPorts shell 添加历史记录附加项。 MacPorts 当前使用类似 bash 的历史记录,其中历史记录是在 session 结束后写入的。如果 session 崩溃,这可能会有问题,所以我试图让 MacPorts shell 遵循 zsh 的示例。即,在执行时将每个历史项附加到文件中。

GNU readline,这个功能对于函数 append_history. 是微不足道的但是,MacPorts 依赖于 Apple 的 editline反而。 editline 库似乎没有 append_history 的等价物,所以我有点不知道该怎么做才能将历史追加到文件中。我想过使用像 fopenfprintf 这样的旧标准函数,但我意识到 editline 使用它自己的历史字符串编码(例如,空格字符被转换为八进制 \040)。 MacPorts 需要与该编码兼容,因为在多个地方使用了 editline。我假设使用了这种编码,因为空格被用作历史定界符。

我可以尝试编写自己的函数来与这种编码兼容,但这似乎充满了不必要的困难。我觉得我一定是错过了什么。有没有一种简单的方法可以使用 editline 将历史记录附加到文件?

最佳答案

好吧,最终的解决方案是使用那些好的旧标准函数。我们还在混合中添加了一些文件锁定,只是出于偏执狂的缘故:

s = Tcl_GetString(objv[2]);
hist_file = fopen(s, "a");

flock(fileno(hist_file), LOCK_EX);
fprintf(hist_file, "%s\n", current_history()->line);
flock(fileno(hist_file), LOCK_UN);

fclose(hist_file);

我已经详细解释过了 here.the relevant PR. 建议文件锁定这可能不是代码的最终形式,但这是我们目前所拥有的,并且可能是我们将要使用的。如果我们改变它,它可能会很轻微。

关于c - 如何在编辑行中追加历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50575078/

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