我有一个由换行符分隔的整数文件,例如:
277
123
456
。
。
。
等
我能够使用read()Linux系统调用(例如
)读取文件内容并将其存储在数组缓冲区中// open the file
fileDesc = open(filename,O_RDONLY);
// read the file if it opened successfully
read(fileDesc, buffer, MAX_BUFF_SIZE)
我还有更多内容,但当我使用printf(%c格式)查看缓冲区的内容时,它将文件内容存储为,
缓冲区[0] = 2
缓冲区[1] = 7
缓冲区[2] = 7
缓冲区[3] =
缓冲[4] = 1
缓冲[5] = 2
缓冲[6] = 3
。
。
等等
我真的希望每个缓冲区索引在每个\ n之前保存一个整数值,例如
缓冲区[0] = 277
缓冲区[1] = 123
缓冲[2] = 456
。
。
等。
有什么方法可以控制read()系统调用将文件内容存储到缓冲区的方式?或者有更好的替代方案来完成这项任务吗?
感谢。
答案 0 :(得分:1)
将文本数据解析为数字不是操作系统提供的I / O例程的范围。他们只是按原样提供文件内容。
C标准库提供了一些可以进行解析的函数。例如,请查看strtol
。
请注意,您将拥有两个缓冲区,一个类型为char
或unsigned char
,用于保存原始数据,另一个为适当的数字类型,可以保存已分析的值。
答案 1 :(得分:1)
使用缓冲的C stdio库可以获得更好的成功。这是您需要的基本代码:
#include <stdio.h>
FILE *fp;
int n;
fp = fopen(filename, "r");
if (fp == NULL) ... // error, could not open
while (fscanf(fp, "%d", &n) == 1) {
printf("n = %d\n", n);
}