Дескриптор файла и ветвление

У меня есть свой ноутбук 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 также.

12
18.09.2013, 01:20
2 ответа

Когда ребенок разветвлен затем, это наследовало дескрипторы файлов родителя, если ребенок закрывает дескриптор файла, что произойдет?

Это наследовало копию дескриптора файла. Так закрытие дескриптора в ребенке закроет его для ребенка, но не родителя, и наоборот.

Если ребенок начинает писать то, что должно произойти с файлом в конце родителя? Кто управляет этими несоответствиями, ядром или пользователем?

Это - точно (как в, точно буквально) то же как два процесса, пишущие в тот же файл. Ядро планирует процессы независимо, таким образом, Вы, вероятно, получите чередованные данные в файле.

когда процесс вызывает близкую функцию для закрытия конкретного открытого файла через дескриптор файла. Таблица файлов процесса постепенно уменьшает подсчет ссылок одним. Но так как родитель и ребенок и содержат тот же файл (там, ссылочное количество равняется 2, и после того, как близко это уменьшает до 1), так как это не нуль, таким образом, процесс все еще продолжает использовать файл без любой проблемы.

Существует ДВА процесса, родитель и ребенок. Нет никакого "подсчета ссылок", характерного для них обоих. Они независимы. WRT, что происходит, когда один из них закрывает дескриптор файла, см. ответ на первый вопрос.

24
27.01.2020, 19:54

.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 () создает новый дочерний элемент, дескрипторы файлов не сохраняются - они изменяются.

Хотя файл будет дублированным, он будет иметь другой дескриптор файла.

1
27.01.2020, 19:54

Теги

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