gpt4 book ai didi

c - read() 和 write() 将多余的输出发送到 Vim

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

我正在使用 read()write() 系统调用从 stdin 获取输入并将其打印回 stdout

我从 Vim 内部执行命令来运行我的程序

:!./lowio

缓冲区数组然后被打印出来,但是没有放入我的数组的丢弃字符被发送到 Vim。然后 Vim 将这些字符作为命令进行解释。

#include <unistd.h>
#define BUFSIZE 3

int main()
{
char low[BUFSIZE + 1];
read(0, low, BUFSIZE);
low[BUFSIZE + 1] = '\0';
write(1, low, BUFSIZE);

return 0;
}

例如,输入

abcdG

abc 打印到 stdin 但会将 dG 发送到 Vim,它会从我的光标到文件末尾进行删除。

这是怎么回事?

最佳答案

你的 stdin是您的终端 ( /dev/tty ) 并且您输入了 abcdG<NL> .你的read(0,...,3)调用仅从终端设备驱动程序的缓冲区中请求了 3 个字符 ( abc )。其余字符保留在缓冲区中。然后当您将控制权返回给 vim 时,它会继续从 stdin 读取数据。并获取剩余的缓冲字符。

关于c - read() 和 write() 将多余的输出发送到 Vim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25365524/

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