История изменений
Исправление bugfixer, (текущая версия) :
Возвращаемся к истокам)
- нужен цикл вокруг
memchr() + memcmp()
, подумайте о файле с содержимым «01 01 02 03 04 …» и попытке в этом найти «01 02 03 04». - если
memchr()
остановился слишком близко к концу буфера -memcmp()
делать нельзя. - я не знаю задумывался ли поиск только в первых 128 байтах, но скорее всего хотелось искать во всем файле - и тогда нужен цикл вокруг
fread()
, причём нужно очень аккуратно смотреть на «хвосты»: как толькоmemchr()
остановился ближе к концу буфера чем длинна needle - проще всего двинуть (memmove()
) «хвост» в начало буфера и читать из файла дальше. Это можно продолжать оптимизировать, но на коротких needle «овчинка выделки не стоит», имхо. - Не знаю откуда циферка в 128 байт взялась - для обычных файлов «маловато будет», что-то мне подсказывает Вы на самом деле non-blocking read хотите с
select()
. Но думаю что на этом этапе с non-blocking / async IO Вам разобраться будет сложновато, даже с самой концепцией.
ПыСы. Мне бы очень не хотелось чтобы хоть что-то из того что я сказал воспринималось как какая-то извращённая форма издевательства - я честно помочь пытаюсь указывая на очевидные ляпы.
Исправление bugfixer, :
Возвращаемся к истокам)
- нужен цикл вокруг
memchr() + memcmp()
, подумайте о файле с содержимым «01 01 02 03 04 …» и попытке в этом найти «01 02 03 04». - если
memchr()
остановился слишком близко к концу буфера -memcmp()
делать нельзя. - я не знаю задумывался ли поиск только в первых 128 байтах, но скорее всего хотелось искать во всем файле - и тогда нужен цикл вокруг
fread()
, причём нужно очень аккуратно смотреть на «хвосты»: как толькоmemchr()
остановился ближе к концу буфера чем длинна needle - проще всего двинуть (memmove()
) «хвост» в начало буфера и читать из файла дальше. Это можно продолжать оптимизировать, но на коротких needle «овчинка выделки не стоит», имхо. - Не знаю откуда циферка в 128 байт взялась - для обычных файлов «маловато будет», что-то мне подсказывает Вы на самом деле non-blocking read хотите с
select()
. Но думаю что на этом этапе с non-blocking / async IO Вам разобраться будет сложновато, даже с самой концепцией.
ПыСы. Мне бы очень не хотелось чтобы хоть что-то из того что я сказал воспринималось как какая-то извращенная форма издевательства - я честно помочь пытаюсь указывая на очевидные ляпы.
Исходная версия bugfixer, :
Возвращаемся к истокам)
- нужен цикл вокруг
memchr() + memcmp()
, подумайте о файле с содержимым «01 01 02 03 04 …» и попытке в этом найти «01 02 03 04». - если
memchr()
остановился слишком близко к концу буфера -memcmp()
делать нельзя. - я не знаю задумывался ли поиск только в первых 128 байтах, но скорее всего хотелось искать во всем файле - и тогда нужен цикл вокруг
fread()
, причём нужно очень аккуратно смотреть на «хвосты»: как толькоmemchr()
остановился ближе чем длинна needle - проще всего двинуть (memmove()
) «хвост» в начало буфера и читать из файла дальше. Это можно оптимизировать дальше, но на коротких needle «овчинка выделки не стоит», имхо. - Не знаю откуда циферка в 128 байт взялась - для обычных файлов «маловато будет», что-то мне подсказывает Вы на самом деле non-blocking read хотите с
select()
. Но думаю что на этом этапе с non-blocking / async IO Вам разобраться будет сложновато, даже с самой концепцией.
ПыСы. Мне бы очень не хотелось чтобы хоть что-то из того что я сказал воспринималось как какая-то извращенная форма издевательства - я честно помочь пытаюсь указывая на очевидные ляпы.