我正在使用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,Vim会从光标移到文件的末尾。
这里发生了什么?
答案 0 :(得分:3)
您的stdin
是您的终端(/dev/tty
)并且您输入了abcdG<NL>
。您的read(0,...,3)
呼叫仅从终端设备驱动程序的缓冲区请求了3个字符(abc
)。剩余的字符保留在缓冲区中。然后,当您将控制权返回给vim时,它继续从stdin
读取并获取剩余的缓冲字符。