Intereting Posts
Двойная загрузка Windows с Ubuntu 12.10 UEFI Как исправить "*: i386 не может быть настроен, потому что *: amd64 в другой версии"? Включить камеру по умолчанию в Lenovo T410 Мой Ubuntu не хочет знать Arial Пользовательский макет клавиатуры для использования HJKL, поскольку СТРЕЛКИ не работают должным образом Экстремальный тайм-аут в i3 WM В предпочтениях типа файла в gedit безопасно ли удалить i915-3.18-3.16-dkms после обновления до Ubuntu 15.04? Как настроить несколько графических процессоров (12.04)? Насколько переносимы бинарные файлы в Ubuntu? Полное удаление Thunderbird 45.5.1 от Ubuntu 16.04 LTS Существуют ли альтернативы программному центру? Ошибка при установке углового cli с NPM на новую установку ubuntu «ОШИБКА GNUTLS: был получен пакет TLS с неожиданной длиной», когда я подключаю свой iPhone 3G Как исправить проблему с загрузкой? VFS: невозможно открыть корневое устройство «mapper / x» или неизвестный блок (0,0)

Безопасно ли использовать usleep в Ubuntu со значением, превышающим 1000000

Я видел в человеке, что:

EINVAL usec is not smaller than 1000000. (On systems where that is considered an error.) 

Поэтому я задаюсь вопросом, нормально ли использовать Uleunt в Ubuntu со значением больше 1000000, а если нет (или в случае, если я хочу поддерживать другие платформы), то какая альтернатива, когда мне нужно спать в течение 2.2 секунд (например).

Спасибо.

Один из вариантов – доверять документации и реализовывать ее, используя цикл, чтобы быть в безопасности:

 #define USLEEP_MAX (1000000 - 1) void long_sleep(unsigned long micros) { while(micros > 0) { const unsigned long chunk = micros > USLEEP_MAX ? USLEEP_MAX : micros; usleep(chunk); micros -= chunk; } } 

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

В производстве вы можете повеселиться с Autoconf и друзьями, чтобы обнаружить правильный USLEEP_MAX во время компиляции и даже переключиться на обычную оболочку, если у локальной системы нет предела для аргумента. Можно весело провести время.

Вы должны смотреть на источник ядра Linux, чтобы быть на 100% уверенным, но учитывая, что Ubuntu распространяется только для x86 и x86-64, и кто-то скоро обнаружил бы такое поведение неприемлемым, независимо от того, разрешено ли оно базовым POSIX spec , шансы практически ничтожны, что он когда-либо сломается.

Linux портирован на огромное количество системных портов, которые могут использовать другой уродливый исходный код ядра, поэтому я думаю, что автор manpage просто закрывал свою задницу, когда он адаптировал спецификацию POSIX (или что-то еще), которая отражает очень свободные требования, предназначенные для размещения нечетных микроcontrollerов с ядрами slapdash.