Открытый AIX (): дескриптор файла является нулем (!?)

Принятие Вас идет, отклоняют, и дистрибутив, которым Вы интересуетесь, является сновещательным ozelot, или выше затем следующего должен работать

sudo dd if=<isofile> of=/dev/sd<USBSTICK> oflag=direct bs=1048576

Будьте трижды осторожны с аргументом. dd НЕ проверит, является ли это sensible/mounted/empty/..., просто запишет это. Если Вы, окажется, будете указывать свое корневое устройство или что-либо еще, в чем Вы все еще нуждаетесь, то оно закончится.

Также обратите внимание на то, что установка человечности по умолчанию имеет графического установленного создателя usb, таким образом, никакая потребность в unetbootin.

2
10.11.2013, 21:49
2 ответа

При каких обстоятельствах мог дескриптор файла процесса 0 быть доступным для общего использования (и не приписанный stdin)

Когда кто-то закрыл stdin, например, с <&- от оболочки.

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
    printf("%d\n",open("foo",O_CREAT));
}
0
27.01.2020, 22:22
  • 1
    Это - хорошая информация, спасибо. Я сделал следующий тест: Я закрыл stdin с "должностным лицом 0 <&-" (между прочим, выполнение просто "0 <&-" сразу закрыло меня из моей оболочки удара). Я затем работал, вышеупомянутое скомпилировало код C, но это последовательно возвращалось "3" вместо теперь, по-видимому, доступного 0 как дескриптор файла. Действительно ли мой тест является неправильным? –  Wheelnut 12.11.2013, 23:00
  • 2
    Каждый процесс имеет свои собственные i/o дескрипторы. Закройте вход оболочки, он выходит. Для выполнения вышеупомянутой программы с закрытым входом выполните его с, например. ./fd0 <&-. –  jthill 12.11.2013, 23:12

open системный вызов обычно возвращает самый низкий дескриптор файла, который уже не используется. Для типичных программ открытые файлы запускаются в 3, потому что дескрипторы файлов 0, 1 и 2 используются для предварительно открытых стандартных дескрипторов (вход, произведите и ошибка). Демон никогда не будет читать входа или производить любой вывод, таким образом, они обычно близко дескрипторы файлов 0 и 1, или вновь откроются /dev/null там. Если демон закрывает дескриптор файла 0 затем следующий файл, он открывается, будет на том дескрипторе. Нет ничего неправильно с этим.

Дескриптор файла 0 действительно “не приписывается stdin” — скорее это - stdin по определению stdin. Нормальные среды выполнения располагают иметь дескриптор файла 0 открытых для входа, но программа, которая не читает входа, является бесплатной использовать тот дескриптор для любой цели, которую это хочет.

1
27.01.2020, 22:22
  • 1
    : неправильно нет ничего. Демоны должны действительно открыть или "/dev/null" или регистратор на дескрипторах файлов 1 и 2 прежде execve'ing другие программы. Иначе можно закончить с выводом журнала на файлах данных. Примите во внимание, что, даже если программа, кажется, ничего не производит к станд. {допустить ошибку}, библиотеки могут. Даже glibc может произвести к stderr, если LIBC_FATAL_STDERR_ установлен ot, если он не может открыть "/dev/tty". –  ninjalj 11.11.2013, 18:43
  • 2
    @ninjalj На fd 2, да. Но на fd 0, я не вижу оснований. Любой файл, открытый демоном, должен быть закрыт прежде, чем выполнить несвязанный процесс независимо от дескриптора. –  Gilles 'SO- stop being evil' 12.11.2013, 00:09

Теги

Похожие вопросы