У меня есть свой ноутбук Linux Arch, подключаются с помощью сценария оболочки. Это для одного из WEP (я знаю, я знаю...), маршрутизаторы, которые я использую:
#!/bin/bash
DEV=$(iw dev | awk '/Interface/ {interf=$2} END {print interf}')
PIDFILE=/var/run/dhcpcd-$DEV.pid
if [[ -f $PIDFILE ]] && kill -0 $(cat /var/run/dhcpcd-$DEV.pid)
then
dhcpcd -k $DEV
fi
ifconfig $DEV down
sleep 1
iwconfig $DEV mode managed
ifconfig $DEV up
iwconfig $DEV channel 1
iwconfig $DEV key 4567ABCDEF
iwconfig $DEV essid 'ACTIONTEC'
iwconfig $DEV ap 00:0d:51:BF:FE:E1
sleep 5
dhcpcd --noarp $DEV
Каждый шаг делает всего одну вещь, таким образом, легко выяснить, где проблема заключается. Ноутбук раньше выполнял Slackware, под которым я записал сценарий, но это, кажется, работает просто великолепно при Arch также.
Когда ребенок разветвлен затем, это наследовало дескрипторы файлов родителя, если ребенок закрывает дескриптор файла, что произойдет?
Это наследовало копию дескриптора файла. Так закрытие дескриптора в ребенке закроет его для ребенка, но не родителя, и наоборот.
Если ребенок начинает писать то, что должно произойти с файлом в конце родителя? Кто управляет этими несоответствиями, ядром или пользователем?
Это - точно (как в, точно буквально) то же как два процесса, пишущие в тот же файл. Ядро планирует процессы независимо, таким образом, Вы, вероятно, получите чередованные данные в файле.
когда процесс вызывает близкую функцию для закрытия конкретного открытого файла через дескриптор файла. Таблица файлов процесса постепенно уменьшает подсчет ссылок одним. Но так как родитель и ребенок и содержат тот же файл (там, ссылочное количество равняется 2, и после того, как близко это уменьшает до 1), так как это не нуль, таким образом, процесс все еще продолжает использовать файл без любой проблемы.
Существует ДВА процесса, родитель и ребенок. Нет никакого "подсчета ссылок", характерного для них обоих. Они независимы. WRT, что происходит, когда один из них закрывает дескриптор файла, см. ответ на первый вопрос.
.1. Итак, какова разница между [-a $ FILE] и [-e $ FILE], если таковая имеется?
Разницы нет вообще.
В строке 505-507
в test.c
версии bash 4,2,45 (1) -release
:
case 'a': /* file exists in the file system? */
case 'e':
return (sh_stat (arg, &stat_buf) == 0);
Это указывает на отсутствие реальной разницы между обоими флагами.
.2. Если нет реальной разницы, почему существуют два флага для одной цели?
См. ответ gnouc .
-121--34253- Всякий раз, когда fork ()
создает новый дочерний элемент, дескрипторы файлов не сохраняются - они изменяются.
Хотя файл будет дублированным, он будет иметь другой дескриптор файла.