LINUX.ORG.RU

История изменений

Исправление zer0cat, (текущая версия) :

Опять столкнулся со странной ошибкой этого самого fread. Вроде все хорошо делаю. Простой пример, читаем данные и перезаписываем их назад поблоков. Уходит в бесконечный цикл..

Корректно читает 1, 2, 3 мегабайты, а дальше начинается бред.

#define BLOCK_SIZE 1024*1024
int badread(const char* file_name)
{
	FILE* f = NULL;
	size_t dwWR = 0;
	uint64_t pos = 0;


	f = fopen(file_name, "r+b");
	if (f != NULL)
	{
		uint8_t* lpBuf = malloc(BLOCK_SIZE);
		memset(lpBuf, 0, BLOCK_SIZE);

		do
		{
			dwWR = fread(lpBuf, sizeof(uint8_t), BLOCK_SIZE, f); //размер элемента, к-тво элементов

			if (dwWR == 0) break;

			pos = dwWR;
			fseek(f, -pos, SEEK_CUR);

			if ((fwrite(lpBuf, sizeof(uint8_t), dwWR, f)) != dwWR)
			{
				puts("fwrite");
				break;
			}

		} while (!feof(f));

		FREE(lpBuf);

		fclose(f);

	}

	return 1;
}

Исходная версия zer0cat, :

Опять столкнулся со странной ошибкой этого самого fread. Вроде все хорошо делаю. Простой пример, читаем данные и перезаписываем их назад поблоков. Уходит в бесконечный цикл..

Корректно читает 1, 2, 3 мегабайты, а дальше начинается бред.

#define BLOCK_SIZE 1024*1024
int badread(const char* file_name, uint32_t step)
{
	int bOk = 0;
	FILE* f = NULL;
	size_t dwWR = 0;
	uint64_t pos = 0;


	f = fopen(file_name, "r+b");
	if (f != NULL)
	{
		uint8_t* lpBuf = malloc(BLOCK_SIZE);
		memset(lpBuf, 0, BLOCK_SIZE);

		do
		{
			dwWR = fread(lpBuf, sizeof(uint8_t), BLOCK_SIZE, f); //размер элемента, к-тво элементов

			if (dwWR == 0) break;

			pos = dwWR;
			fseek(f, -pos, SEEK_CUR);

			if ((fwrite(lpBuf, sizeof(uint8_t), dwWR, f)) != dwWR)
			{
				puts("fwrite");
				break;
			}

		} while (!feof(f));

		FREE(lpBuf);

		fclose(f);
		bOk = 1;
	}
	else
		puts("fopen");


	return bOk;
}