相关疑难解决方法(0)

如何在Linux中实现C的getch()函数?

在TurboC++中,我可以使用getch()函数conio.h.但是在Linux中,gcc没有提供conio.h.我怎样才能获得功能getch()

c gcc getch conio

17
推荐指数
3
解决办法
6万
查看次数

关于原始与熟食终端模式的混淆?

我目前有一个chat client与之成功通信的人a server.我应该修改行为,以便在收到另一条聊天消息时提示向下移动(即通过打印" \b擦除提示",打印消息,然后重新打印提示,将消息打印在提示"上方" .

我们获得了一个test client并且test server用于测试此功能,并且当前当用户有提示但没有输入任何内容时,他们可以接收来自其他用户的消息.当他们开始输入时,缓冲区不会刷新,直到他们输入整个消息并按Enter键.

我应该复制这种行为,但我对原始模式实际上是什么感到困惑.

任何人都可以告诉我如何通过原始模式控制输入/输出,或者为什么上面描述的测试程序的行为发生在使用原始模式?

c io terminal

5
推荐指数
2
解决办法
4519
查看次数

处理linux上的用户输入

我正在努力在linux上创建一个简单的shell.我可以创建一些东西来学习如何使用基本系统调用.

场景:命令中的用户类型,按Tab键(因此shell自动完成其命令),弹出自动完成的命令(或建议),用户按Enter键,命令evals并执行.

就像在bash中一样.

我已经想出如何进行evals,将命令转换为标记,使用管道和东西执行它.我无法弄清楚的是输入部分.即那些标签击键.

我知道我有什么选择:

  • getc() - 分别获取每个字符,将其存储在缓冲区中.无法弄清楚如何获得Tab键击,因为它会暂停执行,直到它看到'\n'或Ctrl + D. 有点贵,因为命令中的每个字符都会有1个getc().另外,我将不得不处理缓冲区重新分配,摊销......嘘......
  • scanf("%s") - 太担心缓冲区溢出.我不能得到那些标签击键.暂停执行
  • read()(来自unistd.h) - 可能是我不想做的事情.但是我看到这里的人说使用它来做这件事真的很痛苦.我检查了.它是.
  • getline() - 无法获得Tab键击.

我查看了bash源代码,看看它是如何处理输入的,以及OH MY GOD.有450行代码专门用来做这个简单的事情(input.c文件).

真的没有比这更简单的解决方案吗?我不想使用ncurses,我不关心可移植性,我只是想实现一个目标:获取用户输入并知道他何时按Tab键.尽可能少地努力,优雅地做到这一点.

c linux input

5
推荐指数
1
解决办法
228
查看次数

为什么getchar允许单字符输出函数显示字符串?

刚开始使用K&R并点击:

#include <stdio.h>
/* copy input to output; 1st version */
main()
{
    int c;
    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
}
Run Code Online (Sandbox Code Playgroud)

它只显示我输入的内容,即使它是一串文本.

cacti
cacti
stop repeating what i'm saying
stop repeating what i'm saying
Run Code Online (Sandbox Code Playgroud)

就像那样.

我没有得到的是为什么我不能用一串文本实例化变量c并以相同的方式打印它.(为了示例而忽略while循环)与:

main()
{
    int c;

    c = "cacti";
    putchar(c);
}
Run Code Online (Sandbox Code Playgroud)

其中输出显然只是'd'

c character getchar

1
推荐指数
1
解决办法
673
查看次数

标签 统计

c ×4

character ×1

conio ×1

gcc ×1

getch ×1

getchar ×1

input ×1

io ×1

linux ×1

terminal ×1