- это адреса внутри общих файлов библиотеки виртуальных адресов или переезжаемые адреса?

До тех пор, пока вы документируете коды выхода, чтобы запомнить их через год, когда вам придется вернуться и подправить сценарий, вы будете в порядке. Идея «зарезервированных кодов выхода» больше не применима, кроме как говорить, что принято использовать 0 в качестве кода успеха и что-либо другое в качестве кода отказа.

-121--28233-

sed "
  /^admin::common::passwords:$/,/^[^ ].*:$/ {
     /^  $ACCOUNT:$/ {
       N;d
     }
  }" < "$YAML"

То есть заключите удаляемую строфу в раздел, соответствующий admin:: common... и следующий какой-либо раздел: .

Убедитесь, что . символ, распространенный в именах пользователей, также является оператором регулярного выражения, поэтому john.doe будет соответствовать john.doe , но также johnWdoe , например.

Обратите внимание, что вышеперечисленное не сработает, если у вас есть два последовательных раздела admin:: common:: passwords и учетная запись для удаления находится во втором разделе.

Если , как указывает Otheus , разделы работают до следующей строки, которая имеет то же самое или меньшее количество ведущих символов пробела, и ваш раздел admin:: common:: passwords: может иметь некоторые ведущие места, то, вероятно, пришло время переключиться на другой язык, такой как awk :

awk -v account="$ACCOUNT" '
  match($0, /[^ ]/) && RSTART <= n {n = 0}
  n && NF == 1 && $1 == account ":" {getline; next}
  !n && /^ *admin::common::passwords:$/ {
    match($0, /[^ ]/)
    n = RSTART
  }
  {print}' < "$YAML"

-121--1329557-

В дополнение к упомянутому вами, я знаю:

  • BSD имеют sysexits.h , который определяет значения для значений от 64 до.

  • GNU grep документирует, что код выхода 0 означает, по меньшей мере, одно совпадение, 1 означает, что совпадения не найдены, и 2 означает, что произошла ошибка ввода-вывода; это соглашение, очевидно, также полезно для других программ, для которых различие между «ничего не пошло не так, но я ничего не нашел» и «произошла ошибка ввода-вывода» имеет смысл.

  • Во многих реализациях функции библиотеки C system используется код exit 127, указывающий на то, что программа не существует или не была запущена.

  • В Windows коды NTSTATUS (которые неудобно разбросаны по 32-разрядному пространству номеров) могут использоваться в качестве кодов выхода, особенно те, которые указывают на то, что процесс был завершен из-за катастрофического неправильного поведения (например, STATUS _ STACK _ OVERFLOW ).

Вы не можете рассчитывать на то, что какая-либо программа будет подчиняться какому-либо из этих соглашений. Единственное надежное правило состоит в том, что 0 кода выхода - это успех, а все остальное - это какой-то сбой. (Обратите внимание, что значение EXIT _ SUCCESS для C89 не является гарантированным нулевым; однако exit (0) должен вести себя идентично exit (EXIT_SUCCESS) , даже если значения не совпадают.)

1
19.10.2018, 06:11
1 ответ

Процессы получают виртуальное адресное пространство. Файл ELF указывает виртуальный адрес для загрузки содержимого раздела, включая общие объекты, в это виртуальное адресное пространство. Это будут виртуальные адреса.

Разделы имеют таблицы перемещений, которые указывают на адреса, зависящие от положения, которые корректируются во время перемещения во время загрузки. Этому есть несколько причин, но если все адреса в разделе могут быть перемещены в раздел, то его перемещение является целью создание перемещаемого файла ELF, который затем можно использовать в качестве входных данных для создания исполняемого или общего объекта.

Совместно используемая библиотека представляет собой уровень выше общих объектов ELF и является функцией динамического компоновщика операционных систем во время загрузки. Он переназначит перемещенные адреса в пространстве виртуальной памяти процессов.Таким образом, общая библиотека имеет перемещаемые разделы и виртуальные адреса. Называть их перемещаемыми адресами вводит в заблуждение, потому что на самом деле это раздел кода и связанная с ним таблица перемещений, которые делают адрес перемещаемым.

GCC -fPICсоздает независимый от позиции код, что устраняет необходимость перемещения. Функционально перемещаемый файл ELF может иметь код, зависящий от позиции или независимый.

1
27.01.2020, 23:42

Теги

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