我正在使用 C++ 和终端。所以我的程序使用用户输入read(STD_FILENO,buf,BUFFER
,我试图只写回特定的行。
例如,如果用户总共输入了 10 行,我将如何打印第 3 到 7 行或第 6 行到第 10 行?
我正在尝试使用write()
函数 ( write(STD_FILENO,buf,BUFFER)
) 但它没有打印我想要的内容。
我试过搞乱 BUFFER 并试图使它小于用户输入的字符总数,但它仍然无法正常工作。
我的理解是,无论我说什么BUFFER
,它都会写到那个 BUFFER 值,所以它会从 0 开始到 BUFFER。但是如果我想从第 6 行开始,那可能从字符 #15 而不是 0 开始......这有意义吗?
请注意:我需要使用read()
和write()
谢谢你!
如果您只需要使用read(2)和write(2),那么您还需要open(2)、close(2)、lseek(2)并且您需要在上面设计和编码您自己的缓冲 IO 库它。仔细阅读这里提到的每个系统调用的文档。使用他们每个人的结果。处理代码中的错误情况。参见errno(3)和perror(3)。
因此,在其中保留一个缓冲区(或多个)和几个指针(或偏移量)(可能至少是当前消耗的位置和最后一个read
位置等)。
也许你会想要使用一些容器。您可能会开始fgetc
在缓冲 IO 类上实现自己的等价物,并在此基础上进行构建。
行在系统调用级别并不真正存在。你需要照顾\n
你的代码。
顺便说一句,您可以学习一些实现 的自由软件C 库的源代码以获得灵感<stdio.h>
,例如musl-libc
当然,您应该使用所有警告和调试信息(g++ -Wall -Wextra -g
使用GCC)进行编译,并且您需要使用调试器gdb
来了解程序的行为并找到错误。不要害羞地在某些板上绘制虚拟地址空间中发生的情况(用箭头表示的指针)。
注意:SO 不是做功课的服务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句