gpt4 book ai didi

c - Git 类似于 C 中的寻呼机和编辑器处理

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:02 25 4
gpt4 key购买 nike

我正在做一个 C 项目,我想使用外部 CLI 程序,例如 less 作为寻呼机,nanovi 作为提交多行消息的编辑器。这个想法来自 Git。就像我们在不使用 -m 的情况下使用 say git commit 一样,会执行一个编辑器以启用多行提交消息。并使用 git log 执行类似 less 的寻呼机以启用内容导航。

这个想法是重现相同的行为。除了传呼机,它还有一些更微妙的地方。我愿意显示的内容是从远程服务器上取回的,必须像无限卷轴一样,一部分一部分地取回。这意味着我需要以某种方式知道寻呼机何时消耗了所有提供给它的内容,检索更多内容并将其附加到已经显示的内容中。

所以我要找的是:

  • 关于我可以实现的方法的一些建议和忠告这些功能。
  • 在此背景下可能有用的标准工具或库(例如作为 gnulib 模块)。
  • 我在处理它时必须注意的细微之处,以便构建一个强大的程序。

我知道这不是一个精确的问题,我希望它能通过长时间的讨论产生结果。

最佳答案

只需popen pager 并写入popen 给你的文件:

#include <stdio.h>

int produce(FILE *f){
for(int i=0; i<1000000;i++){
if(0>fprintf(f,"printing line %d\n", i))
return -1;
}
return 0;
}
int main(){
FILE *out;
if(0==(out = popen("$PAGER", "w"))){
perror("popen");
return 1;
}
return -produce(out);

}

您想要的行为自然是基于管道的 IPC 的一部分。你的 produce 函数的等价物应该简单地尝试逐 block 地从服务器获取内容并将其逐 block 写入文件(管道),直到所有内容都被获取和写入。

分页器不会一次消耗所有输入,因此,生产函数所在的线程/进程在填满管道缓冲区时将被阻塞,只有在分页器(进程/线程在读取管道的末端)通过从其标准输入读取更多文本来清空管道缓冲区。

默认情况下,管道缓冲区通常约为 8KiB,这意味着除非您使用 fcntl 将管道缓冲区重置为不同的大小(这在您的情况下可能是理想的),否则您的生产者将被允许在它之前获取和写入超过 8KiB 的内容被阻止(一旦用户向下滚动超过 8KiB 等,它将被解除阻止(=> 允许继续获取))。

关于c - Git 类似于 C 中的寻呼机和编辑器处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41274226/

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