所以,我现在正在研究一个小壳 我通过自己的getline实现获得用户输入,该实现重复调用fgetc(stdin)并重新分配以读取一行。
如何让用户使用左右键将光标移动到他当前正在写入的输入中?
功能:
#define LINE_BUFSIZE 256
static char *get_line(void)
{
char *line = malloc(LINE_BUFSIZE);
char *linep = line;
size_t lenmax = LINE_BUFSIZE;
size_t len = lenmax;
int c;
if (!line)
return NULL;
for (;;) {
c = fgetc(stdin);
if (c == EOF)
break;
if (--len == 0) {
len = lenmax;
lenmax *= 3;
lenmax /= 2;
char *linen = realloc(linep, lenmax);
if (!linen) {
free(linep);
return NULL;
}
line = linen + (line - linep);
linep = linen;
}
if ((*line++ = c) == '\n')
break;
}
*line = '\0';
return linep;
}
答案 0 :(得分:2)
基本上有三种方法可以做到这一点。按努力降序:
使用GNU readline 库。从其手册:
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
char *
readline (const char *prompt);
说明
readline
将从终端读取一行并使用提示返回 作为提示。如果prompt为NULL或空字符串,则不提示 发行。返回的行分配有malloc(3)
;来电者必须 完成后free
。返回的行有最后的换行符 删除,所以只剩下该行的文本。
readline
在用户输入时提供编辑功能 线。默认情况下,行编辑命令类似于 emacs的。还有一个vi风格的线编辑界面。