读取输入而不指定输入长度

问题描述

我试图让用户输入任意长度。

更具体地说,我试图从输入中读取将使用 mkdir 系统调用 (0x27) 创建的目录。但由于这种特殊性仅适用于 mkdir;您还可以为我的程序“创建目录”包含一个问题;我有多个类似这样的程序。

没有 C 库将不胜感激。

我试过了

mov r7,#0x04
mov r0,#0x00
ldr r1,=some_variable
mov r2,#(1 << 30)
swi 0x00

但它有效(在终止的字符串上);但是,我想知道解决此问题的其他方法。

解决方法

一般来说,如果您不知道长度但想读取所有数据,则必须分块读取。块大小可以是任何您想要的大小,少至 1 个字节,也可以多至您喜欢的大小。

有些数据结构不适合这种分块,因此对于它们,我们需要将固定大小读取的块组合成可以处理的单元的策略。可变长度记录(例如文本行)可能属于这一类,其中一行的长度偶尔会超过固定块大小,但处理算法想要查看整行。

有时我们必须将所有块合并到一个缓冲区中以进行进一步处理。与其首先分配尽可能大的缓冲区,不如说最有可能使用动态内存分配和内存复制来最终呈现连续的数据缓冲区。

过大的数据集可能需要特殊处理,例如使用 64 位计算机。内存映射文件也是一个选项,可以在应用程序级别删除一些缓冲,有利于让系统这样做。

无论是用 C 语言还是汇编语言,以上都适用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...