我是C的新手。无论如何,大学时我需要能够在Linux上的C中读取文本文件,设置O_DIRECT标志。我搜索了很多,但我只找到使用fopen()函数的解决方案,虽然我必须使用open()。就编程而言,作为新手,对我来说似乎相当复杂。任何人都可以帮我这个吗?
答案 0 :(得分:0)
你的作业可能是关于在文件上实现一些buffering(这是<stdio.h>
和fopen
正在为你做的事情)。
您可以使用read(2)计数一个字节,但效率极低。实际上,您应该将几千字节(例如4Kb或32Kb)的缓冲区传递给read
,您应该使用返回的大小来管理缓冲区(并可能将某些指针移入缓冲区)。
阅读Advanced Linux Programming。也许研究实现这种缓冲的库的实现(GNU glibc&amp; musl-libc都是libc的自由软件实现,因此包含<stdio.h>
实现你可以学习)。
不要忘记编译所有警告和调试信息(例如gcc -Wall -Wextra -g
)。使用调试器(gdb
)和valgrind。使用最近的GCC,还可以使用其他gcc
debugging options,例如-fsanitize=address
等。
答案 1 :(得分:0)
你想要做的是将你得到的文件描述符包装在一个包含缓冲区的某种结构(你自己的FILE结构)中。
你自己的fread应首先从缓冲区服务数据,只有当没有时,它应该调用man 2
再次填充缓冲区,依此类推。
{{1}}是你的朋友。所有这些系统功能都有很多选项,但不要让你太烦恼。它的要点非常简单。