如何使用Linux系统调用read()来控制文件的数据内容?

时间:2014-10-19 17:53:23

标签: c linux unix system-calls readfile

我有一个由换行符分隔的整数文件,例如:

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()系统调用将文件内容存储到缓冲区的方式?或者有更好的替代方案来完成这项任务吗?

感谢。

2 个答案:

答案 0 :(得分:1)

将文本数据解析为数字不是操作系统提供的I / O例程的范围。他们只是按原样提供文件内容。

C标准库提供了一些可以进行解析的函数。例如,请查看strtol

请注意,您将拥有两个缓冲区,一个类型为charunsigned 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);
}