LINUX.ORG.RU

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

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

Возвращаемся к истокам)

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

ПыСы. Мне бы очень не хотелось чтобы хоть что-то из того что я сказал воспринималось как какая-то извращённая форма издевательства - я честно помочь пытаюсь указывая на очевидные ляпы.

Исправление bugfixer, :

Возвращаемся к истокам)

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

ПыСы. Мне бы очень не хотелось чтобы хоть что-то из того что я сказал воспринималось как какая-то извращенная форма издевательства - я честно помочь пытаюсь указывая на очевидные ляпы.

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

Возвращаемся к истокам)

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

ПыСы. Мне бы очень не хотелось чтобы хоть что-то из того что я сказал воспринималось как какая-то извращенная форма издевательства - я честно помочь пытаюсь указывая на очевидные ляпы.