c-自定义输入,当在命令行中的单词中间写入时,文本将被覆盖

c-自定义输入,当在命令行中的单词中间写入时,文本将被覆盖,c,shell,input,termios,C,Shell,Input,Termios,我正在用C编写一个自定义shell。我目前正在尝试获取用户输入 我已将终端置于原始模式: term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); term.c_oflag &= ~OPOST; term.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN); term.c_cflag &= ~(CSIZE | PA

我正在用C编写一个自定义shell。我目前正在尝试获取用户输入

我已将终端置于原始模式:

term.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
term.c_oflag &= ~OPOST;
term.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN);
term.c_cflag &= ~(CSIZE | PARENB);
term.c_cflag |= CS8;
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
这样我可以处理箭头键和其他特殊键

我的问题是,当我试图在一个词的中间写东西时,文本会被覆盖。

我明白了:

但我需要这个:

注意:我最初使用字符串abc,当光标位于“b”时,我按“z”。在我的例子中,'z'覆盖'b',但我需要将其插入'a'和'b'之间,并将bc向右移动一列


termios中是否有我丢失的标志,或者我必须以艰难的方式处理所有事情?

没有termios标志。相反,您可以咨询termcap以了解:

即时通讯

进入插入模式的命令字符串。如果终端没有特殊的插入模式,但它可以使用特殊命令插入字符,则应使用空值定义im,因为vi编辑器假定如果未提供im,则无法插入字符。新的程序不应该像vi一样运行。只有在im被定义的情况下,它们才应该关注im


你怎么写?你会去一个特定的职位写这封信吗?你能创建一个并展示给我们看吗?我基本上是写din_FILENO,abc,3,然后我使用termcap tgoto函数来移动光标,然后我调用另一个writeb,但是单词包装仍然存在问题。。。我真的想不出一个好办法来解决它