LINUX.ORG.RU

Ответ на: комментарий от anonymous

Ну автор вроде не просил еще и куски файла получать. :)

e=$((($(stat -c '%s' "$1")+1048575)/1048576))
for ((m=0; m < e; m++)); do
        dd if="$1" bs=1M skip=$m count=1 status=none | md5sum
done

vodz ★★★★★
()
Ответ на: комментарий от vodz

куски файла

Ну да. Но однострочник удобнее:

f="bacon_3.8.1-wheezy_i386.deb"; b=10000; e=$((($(stat -c '%s' "$f")+$b-1)/$b)); for ((m=0; m < e; m++)); do dd if="$f" bs=$b skip=$m count=1 2> /dev/null | md5sum; done
anonymous
()
Ответ на: комментарий от anonymous

БОЛЬШОЕ СПАСИБО!!!

Прям в десятку и все совпало.

Если не затруднит, что делает эта конструкция

e=$((($(stat -c ‘%s’ «$f»)+$b-1)/$b))

kozanostra
() автор топика
Ответ на: комментарий от kozanostra

что делает эта конструкция

Вычисляет количество блоков (кусков). Если не нравится, мож тупо число задать:

e=21

, но получишь возможность что-то просрать.

anonymous
()
Ответ на: комментарий от kozanostra

Также, если не нравится bash-изм: for ((m=0; m < e; m++));, мож заменить на for m in $(seq 0 20);.

anonymous
()
Ответ на: комментарий от kozanostra

БОЛЬШОЕ СПАСИБО!!!
Прям в десятку и все совпало.

Ну ахренеть. Взяли мой нормальный скрипт, изуродовали в одну строку, лишь бы чем-то написать «но», что совсем не по делу и зачем-то поменяли мегабайт на 10000, а у вас всё с чем-то там совпало.

что делает эта конструкция

Эта конструкция называется целочисленное деление с безусловным округлением вверх.

vodz ★★★★★
()
<?php

$fp = fopen($_SERVER['argv'][1], 'rb');
if (!$fp) {
  die("can't open input file for reading\n");
}

while(!feof($fp)) {
  $s = fread($fp, 1 << 20);
  if($s !== false) {
    echo md5($s),PHP_EOL;
  }
}
fclose($fp);
anonymous
()
Ответ на: комментарий от i-rinat

Чой-та не подошёл?

You Best of the Best.

anonymous
()
Ответ на: комментарий от anonymous

без bash-измов

Arithmetic Expansion должно работать для всех оболочек, соответствующих POSIX.

i-rinat ★★★★★
()
Ответ на: комментарий от anonymous

1 << 20

Всё-таки спрошу ещё раз, пардон.
Крайне любопытно, но никто не хочет объяснить. Не могу понять - всем начхать или это настолько просто что лень отвечать.

Вот такие штуки - их точно интерпретатор/компилятор умеет один раз вычислять? Точно не будет при каждой итерации снова двигать биты?

А если умеет - это же значит, что ему для интерпретации надо как минимум два прохода по коду?
И если я сам, руками учёл все константы и их не надо больше оптимизировать - можно ли интерпретатору задать режим быстрого исполнения без оптимизаций?

----------
Здесь это - скорее как повод докопаться. В общем случае - страшно смущают внутри циклов вызовы функций или объявление переменных. В разных языках. Просто интересно - никого что ли не смущают и почему?

Toxo2 ★★★
()
Ответ на: комментарий от Toxo2

Точно не будет при каждой итерации снова двигать биты?

почему тебя волнует сдвиг бит в регистре процессора ?

x905 ★★★★★
()
Ответ на: комментарий от x905

Вопрос как раз в этом - почему вас не волнует лишний такт процессора?

Там лишний такт, здесь лишний такт. И вот уже ваш вчерашний процессор - не процессор.

Это ж не ракетная наука - выносить все подсчеты, по возможности, за цикл. И наиболее вероятное событие выдвигать вверх всех других условных переходов.

Единственное понятное оправдание - за вас это будет делать сам компилятор/интерпретатор.
Любопытствую - так ли это, или всем действительно пофиг.

Toxo2 ★★★
()
Ответ на: комментарий от vodz

to vodz: БОЛЬШОЕ СПАСИБО!!!
конечно твой скрипт проверил уже сегодня все работает, просто вчера вечером уже спать собирался и проверил только, однострочник, т.к. было быстрее и да однострочник совпал после замены 10000 на 1048576. В однострочнике был указан файл примера bacon_3.8.1-wheezy_i386.deb и его интуитивно без разбора было проще копипастить (каюсь мозг вечером включать не захотел)

to anonymous: БОЛЬШОЕ СПАСИБО!!!
to i-rinat: БОЛЬШОЕ СПАСИБО!!!

Все коды из темы прекрасно отрабатывают, большое всем спасибо, тему можно закрывать, отмечаю как решенную.

kozanostra
() автор топика
Ответ на: комментарий от Toxo2

Вопрос как раз в этом - почему вас не волнует лишний такт процессора?

очевидно потому, что преждевременная оптимизация - зло

а уж спрашивать о лишнем такте в рамках кода на php - это издевательство

x905 ★★★★★
()
Ответ на: комментарий от x905

Да почему же в рамках php? (((

«Вот такие штуки» - это не в каких-то рамках же. В прошлый раз спрашивал похожее по мотивам кода на Си.

Ладно, проехали. Человек тему закрыл. Человеку всё понятно. И чудненько.

Toxo2 ★★★
()
Ответ на: комментарий от Toxo2

Да почему же в рамках php

я вижу тут код на php

и даже на си - сдвиг регистра это сущая мелочь, о которой не стоит и беспокоится, если читаемость кода улучшается.

а что там ТС тему закрыл, так это его проблемы )

x905 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.