Если ваш файл не очень большой, если вы используете read (), было бы легче прочитать весь файл, а затем работать с буфером памяти, а не с отдельными блоками.То есть, если каждая строка не имеет фиксированной длины.
Я бы сделал что-то вроде этого:
int rc;
int fd = open("data", O_RDONLY); // open the file for reading
if (fd == -1) {
// error
}
// to be thorough, do a stat() here to find how big to make the buffer
struct stat sb;
rc = fstat(fd, &sb);
if (rc == -1) {
// error
}
char *buffer = calloc(1, sb.st_size);
int bytes_read = 0;
// read in entire file; each read() can be incomplete, hence why it's in a loop,
// and reading from/writing to increasing sections of the memory and file
while ((rc = read(fd, (buffer + bytes_read), (sb.st_size - bytes_read))) > 0) {
if (rc == -1) {
// error
}
bytes_read += rc;
}
close(fd);
// Now, to read it line-by-line...
char line[128]; // 128 is arbitrary
int pos = 0;
while ((rc = sscanf(buffer + pos, "%127[^\n]\n", line)) > 0) {
pos += strlen(line) + 1;
// do stuff with line
}
return 0;
Затем вы можете построчно работать со своим буфером памяти, сканируядля перевода строки или использования sscanf ().Также убедитесь, что ваш буфер освобожден ()!
Редактировать: Я добавил пример кода для использования sscanf () для обработки вашего буфера.Если вы знаете формат строк (вы говорите, что анализируете их), вы можете лучше использовать sscanf (), используя спецификаторы формата.Кстати, все это не проверено.