Справочник по консольным командам Toybox для Android 12


  Ver.0.8.4     Ver.0.8.9     Pending  

Путь: Toys/POSIX, команды версии: Ver.4     Ver.9

Комментарии в файле cksum.c :

Команд: 2


cksum

usage: cksum [-IPLN] [FILE...]

Для каждого файла выведите значение контрольной суммы crc32, длину и имя файла. Если файлов нет в списке, скопируйте из стандартного ввода. Имя файла "-" является синонимом стандартного ввода.
  • -H Шестнадцатеричная контрольная сумма (по умолчанию десятичная)
  • -L Little endian (по умолчанию big endian)
  • -P Прединверсия
  • -I Пропустить постинверсию
  • -N Не включать длину в вычисление CRC (или вывод)

  • usage: cksum [-IPLN] [FILE...]

    For each file, output crc32 checksum value, length and name of file. If no files listed, copy from stdin. Filename "-" is a synonym for stdin.
  • -H Hexadecimal checksum (defaults to decimal)
  • -L Little endian (defaults to big endian)
  • -P Pre-inversion
  • -I Skip post-inversion
  • -N Do not include length in CRC calculation (or output)

  • crc32

    usage: crc32 [file...]

    Вывести контрольную сумму crc32 для каждого файла.


    usage: crc32 [file...]

    Output crc32 checksum for each file.


    Исходный текст в файле cksum.c

    #define FOR_cksum
    #define FORCE_FLAGS
    #include "toys.h"
    
    GLOBALS(
      unsigned crc_table[256];
    )
    
    static unsigned cksum_be(unsigned crc, char c)
    {
      return (crc<<8) ^ TT.crc_table[(crc>>24)^c];
    }
    
    static unsigned cksum_le(unsigned crc, char c)
    {
      return TT.crc_table[(crc^c)&0xff] ^ (crc>>8);
    }
    
    static void do_cksum(int fd, char *name)
    {
      unsigned (*cksum)(unsigned crc, char c), crc = FLAG(P) ? ~0 : 0;
      unsigned long long llen = 0, llen2;
      int len, i;
    
      cksum = FLAG(L) ? cksum_le : cksum_be;
      // CRC the data
    
      for (;;) {
        len = read(fd, toybuf, sizeof(toybuf));
        if (len<0) perror_msg_raw(name);
        if (len<1) break;
    
        llen += len;
        for (i=0; i<len; i++) crc=cksum(crc, toybuf[i]);
      }
    
      // CRC the length
    
      if (!FLAG(N)) for (llen2 = llen; llen2; llen2 >>= 8) crc = cksum(crc, llen2);
    
      printf(FLAG(H) ? "%08x" : "%u", FLAG(I) ? crc : ~crc);
      if (!FLAG(N)) printf(" %llu", llen);
      if (toys.optc) printf(" %s", name);
      xputc('\n');
    }
    
    void cksum_main(void)
    {
      crc_init(TT.crc_table, FLAG(L));
      loopfiles(toys.optargs, do_cksum);
    }
    
    void crc32_main(void)
    {
      toys.optflags |= FLAG_H|FLAG_N|FLAG_P|FLAG_L;
      if (toys.optc) toys.optc--;
      cksum_main();
    }