Во время работы над проектом, который читает из /dev/urandom
для генерации случайных байтов, было предложено проверить, что /dev/urandom
- это устройство, а не только файл.
Самый простой способ - это что-то вроде:
/**
* Is the given file a device?
*
* @param string|resource $file
* @return boolean
*/
function is_device($file)
{
if (is_resource($file)) {
$stat = fstat($file);
} elseif (is_readable($file) && !is_link($file)) {
$stat = stat($file);
} else {
return false;
}
return $stat['rdev'] !== 0;
}
Мой вопрос в два раза:
- Это лучший способ проверить, что этот файл является устройством?
- Существуют ли случаи, когда проверка
$stat['rdev'] !== 0
может завершиться неудачей?
Важно. Решение, которое мне нужно, должно быть на PHP без каких-либо расширений PECL или пользовательского кода C. Проект чистый PHP 5 polyfill функций PHP 7 random_bytes()
и random_int()
и предназначен для установки в любом другом PHP 5 проектов от Composer.