• Что такое other speed descriptor применительно к USB?

    CleverMouse
    @CleverMouse
    Первый байт любого usb-дескриптора — длина, второй байт — тип. Дескриптор 09 07 4A 00 01 02 01 C0 28 имеет тип 7, OTHER_SPEED_CONFIGURATION.

    Видели когда-нибудь сообщение «Это устройство может работать быстрее»?

    Если HighSpeed-устройство (скорость USB2) подключить к компьютеру или хабу, не понимающему USB2, а знающему только скорости USB1 FullSpeed/LowSpeed, устройство обязано проходить несколько начальных этапов инициализации как FullSpeed. Полностью работать не обязано, хотя обычно работает. Дескриптор OTHER_SPEED_CONFIGURATION, если он есть, — способ устройства в такой ситуации сообщить системе, что хоть оно сейчас и работает на FullSpeed, но про HighSpeed тоже знает, просто хаб такой попался по пути или компьютер старый. У чисто FullSpeed-устройств его нет.

    Частично правильную ссылку на документацию вам уже привели выше. В USB3 тип 7 помечен как Reserved и не используется, но есть ссылка «Note that when operating at USB 2.0 speeds, the device shall report the other USB 2.0 speeds it supports using the standard mechanism defined in the USB 2.0 specification». Читать нужно спецификацию USB2, пункт, действительно, 9.6.4. Впрочем, там не особенно интересно — структура дескриптора точно такая же, как структура обычного Configuration Descriptor, с поправкой на тип.
    Ответ написан
    Комментировать
  • Синхронизация в Си или чем отличается вывод в файл от вывода в stdout

    CleverMouse
    @CleverMouse
    Попробуйте в shell-скрипте открывать файл не через ">", а через ">>", убедившись, что перед операцией файла не существует.
    Возможно, различные процессы каким-то образом получают несвязанные копии дескриптора файла, в которых позиция в файле не обновляется при печати из других процессов; тогда процесс 1 может напечатать свою букву a, а потом процесс 2 печатает свою букву b на ту же позицию в файле, затирая a от первого процесса. С консолью такой проблемы нет, потому что она не seekable, в ней нет позиции как таковой. Открывание файла для дозаписи преследует ту же цель — перед каждой операцией записи позиция будет устанавливаться на конец файла.
    Ответ написан
    1 комментарий
  • С++. Создание и инициализация произвольного std контейнера через template?

    CleverMouse
    @CleverMouse
    Если же vector хочется оставить, а убрать только int, тогда даже дополнительного класса не нужно. Правда, нужно учитывать, что у std::vector на самом деле два параметра шаблона.
    template<template<typename U, typename Allocator> class Container, typename T, size_t n>
    Container<T, allocator<T> > ContainerMake(const T(&array)[n])
    {
    	return Container<T, allocator<T> >(array, array + n);
    }
    
    const int vals1[] = {0, 1, 2, 3, 4};
    vector<int> vct1 = ContainerMake<vector>(vals1);
    
    
    Ответ написан
    1 комментарий
  • С++. Создание и инициализация произвольного std контейнера через template?

    CleverMouse
    @CleverMouse
    Заведите вспомогательный класс, возвращайте его из ContainerMake и делайте основную работу в операторе приведения типа:
    template<typename T, size_t n>
    class MakerContainer
    {
    	const T* Array;
    public:
    	MakerContainer(const T* array) : Array(array) {}
    	template<typename U>
    	operator U() const
    	{ return U(Array, Array + n); }
    };
    
    template<typename T, size_t n>
    MakerContainer<T,n> ContainerMake(const T(&array)[n])
    {
    	return MakerContainer<T,n>(array);
    }
    
    const int vals1[] = {0, 1, 2, 3, 4};
    vector<int> vct1 = ContainerMake(vals1);
    
    Ответ написан
  • Подсчет хеша веб странички (HTML)

    CleverMouse
    @CleverMouse
    Почитайте статью от Яндекса как раз про этот вопрос: download.yandex.ru/company/download/paper_65_v1.pdf. И ссылки оттуда.
    Ответ написан
    Комментировать
  • Програма есть, но она не запускается

    CleverMouse
    @CleverMouse
    В формате ELF за загрузку динамических библиотек отвечает специальная библиотека-интерпретатор aka interpreter, имя которой указано в специальном сегменте elf-файла. Если ядро при exec() обнаруживает такой заголовок, то ядро берёт оттуда имя интерпретатора и пытается загрузить и начать выполнение новой программы с интерпретатора. Если запрошенного интерпретатора на диске не оказывается, создание процесса фейлится с кодом ошибки «файл не найден». С точки зрения создателя — на картинке это bash — это ничем не отличается от отсутствия бинарника, а ядро, которое знает разницу, на терминал ничего не выводит в принципе.
    Посмотреть, какой интерпретатор нужен программе, можно через readelf -l . В данном случае явно из 64-битного окружения куда-то слетел 32-битный интерпретатор.
    Ответ написан
    Комментировать