- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
测试用例程序:
#include <stdio.h>
#define SIZE 1024
int main(int args,char *argv[]){
char buf[SIZE];
fgets(buf, SIZE, stdin);
return 0;
}
示例用法(即输入 1024 个 x
字符):
bash-3.2$ gcc read.c -o read
bash-3.2$ ./read
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
^G
在 OS X 上,这会使终端发出哔哔声并等待。我可以再次按下 RET,它会再次发出哔哔声。如果我在管道中或从 Emacs 的 shell 中运行它,我会看到正在输出 ^G
字符。
在我的 Ubuntu VM 上进行完全相同的调用,程序按预期完成(即,将 1023 字节读入 buf
并以 null 终止)。
这会中断我正在尝试编写的程序(使用另一种语言,但使用下面的 C 库),该程序将 JSON 行作为命令界面的一部分。所以问题是:如何在 OS X 中禁用此行为?是否有 API 调用来关闭它?也许是环境变量?太奇怪了。
最佳答案
您可以通过将此添加到您的 ~/.bash_profile
文件来防止此行为:
stty -imaxbel
此命令记录在 Apple manpage 中对于 stty
程序。
imaxbel (-imaxbel) The system imposes a limit of MAX_INPUT (currently 255) characters in the input queue. If imaxbel is set and the input queue limit has been reached, subsequent input causes the system to send an ASCII BEL character to the output queue (the terminal beeps at you). Otherwise, if imaxbel is unset and the input queue is full, the next input character causes the entire input and output queues to be discarded.
您还可以选择在当前 shell 中手动发出 stty -imaxbel
。如果不将其添加到启动文件(如 ~/.bash_profile
),该设置将在您下次登录时恢复为默认值。
如果您需要禁用行缓冲并且每个字符在键入时都传递给程序,那么一种方法是使用 stty cbreak
。它更改的主要内容之一是禁用 icanon
模式,该模式控制您是否处于缓冲线路模式。这article对 cbreak
和 icanon
进行了合理的讨论:
ICANON - Perhaps the most important bit in c_lflag is the ICANON bit. Enabling it enables "canonical" mode – also known as "line editing" mode. When ICANON is set, the terminal buffers a line at a time, and enables line editing. Without ICANON, input is made available to programs immediately (this is also known as "cbreak" mode).
您可以通过如下命令获得您正在寻找的结果:
stty cbreak -imaxbel
这将进入逐字符模式并确保禁用 BEL。
关于c - 为什么 OS X 上的 fgets 输出一个 BELL (^G, ascii : 07) character when input exceeds expected length?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32672141/
我有一个 Node.JS 自动化,它使用 Puppeteer 并在过程中加载一些 URL。我的代码非常基本,仅使用包文档中记录的非常基本的函数。 自动化计划每 15 分钟使用 crontab 运行一次
我尝试阅读 stackoveflow 上回答的一些问题并根据此更改 eclipse.ini: 现在,除了一个应用程序之外,每个应用程序都可以正常运行。它显示此消息: 无法执行 dex:超出 GC 开销
问题描述: Task A. Amount of subtractions You have an array a length n. There are m queries (li,ri), for
编辑:看起来问题是过度使用#includes 创建圈子。我确保只包括那些需要的,它解决了前两个错误。 但是,我仍然为 BUtton 和 Elevator 得到“指定的多个默认构造函数” 每个错误都有两
在CloudKit中,我尝试通过批处理来保存大量的记录。但是,我的应用程序因以下错误而崩溃: Error pushing local data: 这是我的代码: CKModifyRecordsOpe
我正在尝试使用以下代码将 BigQuery 数据集从 Google Cloud Platform 下载到 R 工作区以对其进行分析: library(bigrquery) library(DBI) l
在 Kubernetes 中 Kubernetes Health Check Probes ,如果 timeoutSeconds 超过 periodSeconds 会怎样?例如: initialDel
我们正在使用 youtube 数据 api v3,并且已经有一段时间没有任何问题了。最近,我们收到了这个 403 异常: The request cannot be completed because
我正在将一个项目从gradle版本3.3转换为4.10.1。该项目主要是使用自定义构建步骤构建的C++代码,而不是CMake(externalNativeBuild)或Android.mk(ndkBu
这是我为查找小于或等于给定编号的跳跃数而编写的代码。它显示错误“超出输出限制” int main() { int t; cin>>t; while(t--) { long long int n
我正在尝试使用 Google Translate REST API 并同时请求以下网址: http://ajax.googleapis.com/ajax/services/language/trans
大多数时候,作为 .Net 开发人员,我们可以自由地在高级抽象世界中玩耍,但有时现实会踢你的私密部分,并告诉你要找到一个真的理解。 我刚刚经历过其中一次。我认为将角落数据列为项目列表就足够了,以便您了
我编写了一个更新函数,但是多次执行将产生错误context deadline exceeded。 我的功能: func Update(link string, m bson.M) { conf
我在我的网络服务器上同时使用 mysql 和 asp.net。我还使用 sqlite 数据库以便能够在另一台设备上使用该数据库。我需要在两个数据库之间发送数据。这是一天需要做很多次的事情。这是我如何做
我在我的应用程序中使用 Google TextToSpeech 已经很长时间了,我的许多用户都在使用离线语音,所以我对使用的资源数量没有任何问题。但是在收到 GoogleTTS 的最新更新后,我所有的
我正在尝试从 MySQL 5.0.45 数据库中删除几行: delete from bundle_inclusions; 客户端工作了一段时间,然后返回错误: Lock wait timeout ex
我试图将一个 ~200G 的文件加载到具有 4 个数据节点的 MySQL 集群中,我的目标表的 DDL 是这样的: CREATE TABLE XXXXXX ( ID BIGINT AUTO
我有这个脚本: def number_of_occurences(c, message): position = message.find(c) if position == -1:
我正在尝试对我的应用程序进行单元测试,但大部分测试都失败了,原因是异步等待失败:超过 30 秒的超时时间,未满足预期:“Home Code”。 我不知道为什么会这样失败,但这是我下面的代码 class
我的 HTML 表单是这样的 但是,当我上传一个 3mb 的文件时,它给出错误: Problem: File exceeded max_file_size" 最佳答案 我最后检查过,MAX_FIL
我是一名优秀的程序员,十分优秀!