在不指定输入长度的情况下读取输入
Read input without specifying input length
我正在尝试让用户输入任意长度。
更具体地说,我正在尝试从输入中读取将使用 mkdir
系统调用 (0x27
) 创建的目录。但是由于这种特异性仅适用于 mkdir
;您还可以为我的程序“创建目录”添加一个问题;我有多个这样的程序。
如果没有 C 库,我们将不胜感激。
我试过了
mov r7, #0x04
mov r0, #0x00
ldr r1, =some_variable
mov r2, #(1 << 30)
swi 0x00
但它有效(在终止的字符串上);但是,我想知道解决这个问题的其他方法。
一般来说,如果你不知道长度但想读取所有数据,你将不得不分块读取。块大小可以是任何你想要的,少到 1 字节,多到你喜欢。
一些数据结构不适合这种分块,因此对于它们,我们需要策略将来自固定大小读取的块组合成可以处理的单元。可变长度记录(例如文本行)可能属于此类,其中一行的长度偶尔会超过固定块大小,但处理算法希望看到整行。
有时我们必须将所有块合并到一个缓冲区中以进行进一步处理。与其首先分配尽可能大的缓冲区,不如使用动态内存分配和内存复制来最终呈现连续的数据缓冲区。
过大的数据集可能需要特殊处理,例如使用 64 位计算机。内存映射文件也是一个选项,可以在应用程序级别删除一些缓冲,有利于让系统执行此操作。
无论是用 C 语言还是汇编语言,以上内容都适用。
我正在尝试让用户输入任意长度。
更具体地说,我正在尝试从输入中读取将使用 mkdir
系统调用 (0x27
) 创建的目录。但是由于这种特异性仅适用于 mkdir
;您还可以为我的程序“创建目录”添加一个问题;我有多个这样的程序。
如果没有 C 库,我们将不胜感激。
我试过了
mov r7, #0x04
mov r0, #0x00
ldr r1, =some_variable
mov r2, #(1 << 30)
swi 0x00
但它有效(在终止的字符串上);但是,我想知道解决这个问题的其他方法。
一般来说,如果你不知道长度但想读取所有数据,你将不得不分块读取。块大小可以是任何你想要的,少到 1 字节,多到你喜欢。
一些数据结构不适合这种分块,因此对于它们,我们需要策略将来自固定大小读取的块组合成可以处理的单元。可变长度记录(例如文本行)可能属于此类,其中一行的长度偶尔会超过固定块大小,但处理算法希望看到整行。
有时我们必须将所有块合并到一个缓冲区中以进行进一步处理。与其首先分配尽可能大的缓冲区,不如使用动态内存分配和内存复制来最终呈现连续的数据缓冲区。
过大的数据集可能需要特殊处理,例如使用 64 位计算机。内存映射文件也是一个选项,可以在应用程序级别删除一些缓冲,有利于让系统执行此操作。
无论是用 C 语言还是汇编语言,以上内容都适用。