Информация о версии UNIX 03 соответствия
Содержание:
Введение
Чтобы увеличить совместимость с другими операционными системами UNIX, Apple приложил значительное усилие в OS X v.10.5 для поддержки Единственной Версии 3 (SUSv3) Спецификации UNIX. Несмотря на то, что Apple попытался минимизировать влияние включенных изменений, некоторые из них будут влиять на разработчиков, работающих с UNIX APIs и команды.
Ядро OS X, библиотеки и утилиты нарисованы из многих проектов С открытым исходным кодом, включая FreeBSD, GNU, NetBSD и OpenBSD. Несмотря на то, что эти проекты прилагают усилие для следования за промышленными стандартами, ни один из них не имеет ресурсы для привлечения в формальном процессе сертификации.
Путем выполнения этой работы для OS X Apple приносит преимущества и своим разработчикам (кто может теперь полагаться на четко определенные интерфейсы и поведение), и способствующие проекты С открытым исходным кодом (чей код и документация могут быть обновлены для включения изменений Apple).
Несмотря на то, что Apple попытался сделать процесс максимально бесшовным, некоторые изменения соответствия являются просто несовместимыми с командами и APIs, найденным на более ранних версиях OS X. Этот документ обеспечивает обзор этих несовместимостей, вместе с информацией об определенных изменениях, которые, вероятно, будут проблематичны.
Соответствие и устаревшее поведение
В большинстве случаев тесты соответствия могут пройтись путем добавления функциональности, такой как функции и параметры командной строки, к операционной системе. Поскольку это не изменяет существующее поведение или интерфейсы, оно не будет влиять на текущие приложения (и не будет адресоваться в этом документе). Для мобильности, однако, новый или измененный код должен использовать совместимые интерфейсы.
В некоторых случаях стандарт определяет поведение, которое оставила неуказанным существующая документация, такая как страницы руководства). Тесты ищут это поведение. В большинстве случаев изменения должны были пройти тесты, не будет влиять на текущие приложения. В случаях, где определенные проблемы наблюдались, этот документ обсуждает их.
В относительно небольшое количество случаев, совместимых интерфейсов или поведения фактически конфликтует с найденным в предыдущих (устаревших) версиях OS X. Как обсуждено в compat(5)
страница руководства, OS X v.10.5 обеспечивает способы приблизить устаревшее поведение. Несмотря на то, что это не гарантирует, что текущие программы будут «Просто Работать», это должно минимизировать число кодирования изменений.
Типы проблем совместимости
Существующие скомпилированные приложения не должны встречаться с проблемами в перемещении в OS X v.10.5. Если системный вызов или библиотечная функция, как будет известно, будут иметь новое поведение, то новая версия будет только использоваться с программами, скомпилированными для использования на OS X v.10.5. Существующая исполнимая программа не будет «видеть» эти версии и таким образом не будет затронута изменениями.
Если приложение будет перекомпилировано для использования на OS X v.10.5, то это получит новые версии библиотек и системных вызовов, если устаревшая цель не будет указана (См. проблемы Выполнения, ниже).Some сценарии, такие как удар и perl сценарии, может также встретиться с проблемами с командами, опции которых и/или поведение изменил. Возможно запросить устаревшее поведение путем установки переменной окружения COMMAND_MODE
к значению»legacy
".
Компилируйте/Соединяйте Проблемы
Включать файлы и/или прототипы для многих библиотечных функций и системных вызовов изменились. Если изменение кажется вероятным вызвать проблемы, предыдущая версия или версии были задокументированы в LEGACY SYNOPSIS
раздел страницы соответствующего руководства.
Несмотря на то, что необходимо использовать совместимый, включают файлы и прототипы, если это возможно, следующий макрос:
#define _NONSTD_SOURCE |
будет часто позволять устаревшим версиям использоваться. Снова, посмотрите compat(5)
страница руководства для подробных данных.
Следующие страницы руководства в настоящее время имеют LEGACY SYNOPSIS
разделы:
Системные вызовы:
Библиотечные функции:
Проблемы использования команды
Если опции и/или поведение команды изменились значительно, один или больше LEGACY
разделы должны задокументировать этот факт. Однако эти разделы все еще очень «происходят» в это время.
Следующие команды реагируют на переменную окружения COMMAND_MODE, как обсуждено в compat(5)
:
awk
awk(1)
команда соблюдает несколько форм расширенных регулярных выражений (т.е.{n,m}
,[[==]]
, и[[..]]
). Устаревшая работа отключает это поведение.удар, sh
"
echo -n
«работы вbash(1)
, но не вsh(1)
. В устаревшей работе,echo(1)
встроенный также поддерживает опцию вsh
. Однако это требует этогоsh
самостоятельно будьте выполнены в устаревшем режиме.bash-3.1$ echo ===
===
bash-3.1$ echo -n ===
===bash-3.1$ COMMAND_MODE=legacy sh
sh-3.1$ echo -n ===
===sh-3.1$ exit
exit
bash-3.1$ sh
sh-3.1$ echo -n ===
-n ===
sh-3.1$ COMMAND_MODE=legacy sh -c 'echo -n ==='
===sh-3.1$
Подобные проблемы применяются к пути
echo
обработки»\r
«.printf(1)
команда является рекомендуемым способом обработать новую строку и escape-последовательности.Существующие сценарии могут быть выполнены в устаревшем режиме, как:
COMMAND_MODE=legacy old_script arg ...
Однако это вызовет весь сценарий (и любые команды, которые он выполняет) для работы в устаревшем режиме (обычно, как OS X v.10.4 был бы).
chown
Если
chown(8)
команда, когда вызвано как «chown - RP...» встречается с символьной ссылкой, идентификатор пользователя самой символьной ссылки изменяется. Устаревшая работа отключает это поведение.CP
-i
опция кcp(1)
отключает-f
. В устаревшей работе,-f
и-i
опции не могут использоваться вместе.-f
опция указывает новые права доступа для любого конечного файла. Устаревшая работа отключает это поведение, сохраняя исходные права доступа любого существующего ранее конечного файла.С
-R
опция, ошибка копирования для отдельного файла заставит всю копию завершаться. В устаревшей работе копирование будет продолжаться несмотря на ошибки..crontab
Если дали никакие параметры, эта команда читает из stdin. В устаревшей работе не позволяется этот формат команды.
дата
В устаревшей работе возвращаются следующие значения выхода:
0
— Дата была записана успешно1
— Неспособный назначить дату2
— Способный назначить локальную дату, но неспособный установить его глобально
df
-t
опция обычно не (общие числа выделенного пространства распечатаны, по умолчанию). Однако, если используется с параметром (например,"-t hfs
«, это действует как-T
, но это использование осуждают и нельзя положиться. В устаревшей работе,-t
действия как-T
.«Полный» процент окружен к следующему более высокому целому числу. В устаревшей работе это округляется в меньшую сторону до следующего более низкого целого числа.
Размер блока по умолчанию составляет 512 байтов. Это может быть переопределено
BLOCKSIZE
переменная окружения.-b
,-g
,-k
,-m
, и-P
опции переопределят и значение по умолчанию и любогоBLOCKSIZE
спецификация. В устаревшей работе размер блока по умолчанию составляет 1 024 байта. Таким образом (еслиBLOCKSIZE
указан),-k
опция не и-b
и-P
опции фактически вызывают использование 512-байтовых блоков.du
Любая комбинация
-[LHP]
опции могут быть указаны. Последний, с которым встречаются, определяет поведение команды. В устаревшей работе может быть указана только одна из этих опций.Команда обнаружит и отчет a
SYMLOOP
ошибка (цикл, включающий символьные ссылки). В устаревшей работе, дело обстоит не так.исключая, vi, представление, энергия
-w опция устанавливает значение размера окна по умолчанию для прокрутки. В устаревшей работе это определяет «scriptout» файл.
Много внутренних изменений команд (главным образом незначительными способами), когда команды используются в устаревшей работе.
файл
-i
опция означает, «если файл является регулярным файлом, не классифицируйте его содержание. В устаревшей работе,-i
и--mime
заставьте команду файла выводить строки типа пантомимы, а не более традиционные человекочитаемые.-r
и--raw
опции без операций в секунду. В устаревшей работе они препятствуют тому, чтобы команда файла перевела непечатные символы в их восьмеричные представления.grep
Каре (начало строки) метасимвол никогда не может быть соответствующим ни в каком расположении кроме начала строки. В
-E
режим, grep распечатает сообщение об ошибке и аварийное прекращение работы на определенных случаях этого использования (например,"^^*
", "^^+
", "^^?
«). В устаревшей работе использованию ерунды позволяют привести к сбою (т.е. ничего не соответствовать) тихо.соединение
-e
опция заставляет указанную строку быть замененной в пустые поля, даже если они посреди строки. В устаревшей работе замена только имеет место в конце строки.Только задокументированные опции позволяются. В устаревшей работе некоторые устаревшие опции переписываются в текущие опции.
меньше, больше
В
more(1)
команда,-n
опция указывает число строк на экранный. В устаревшей работе, или когда команда вызывается какless(1)
,-n
используется для подавления нумерации строк.В
more
команда,-p
опция используется для указания команд (например,:p
) для каждого нового экранный из текста. В устаревшей работе, или, когда вызвано какless
,-p
флаг указывает поисковый образец.ls
Когда
-H
указан (и не переопределен-L
или-P
) и аргумент файла является символьной ссылкой, решающей к файлу некаталога, вывод отразит природу ссылки, а не тот из файла. В устаревшей работе вывод опишет файл.-f
опция включает-a
опция (показывают файлы, имена которых имеют период (.
) как первый символ). В устаревшей работе это не делает.-o
опция заставляет перечисление быть в длинном формате, но опускать ID группы. В устаревшей работе,-o
опция изменяет-l
опция, заставляя флаги файла быть перечисленным.-g
,-n
, и-o
опции включают-l
опция (то, чтобы заставлять перечисление быть в длинном формате). В устаревшей работе они не делают.mkfifo
-m
опция устанавливает создаваемый FIFO в указанный режим. В устаревшей работе указанный режим маскируется с0666
.mv
Команда»
mv dir/afile dir
«прервется с сообщением об ошибке. В устаревшей работе это перестанет работать тихо с кодом выхода0
.PR
Последнее пространство перед позицией табуляции заменяется символом табуляции. В устаревшей работе это не.
PS
Самое большое изменение находится в интерпретации
-u
опция, теперь выводящая на экран процессы, принадлежащие указанному имени (енам) пользователя. Таким образом,"ps -aux
«перестанет работать (если Вы не хотите знать о пользователе»x
«). Как удобство, однако,"ps aux
«все еще работы, как это сделало в OS X v.10.4.В устаревшей работе PS имеет следующие различия:
-e
Выведите на экран среду также. То же как-E
.-g
Проигнорированный для совместимости. Не берет параметра.-l
Информация о дисплее связалась со следующими ключевыми словами:uid
,pid
,ppid
,cpu
,pri
,nice
,vsz
,rss
,wchan
,state
,tt
,time
, иcommand
.-u
Информация о дисплее связалась со следующими ключевыми словами:user
,pid
,%cpu
,%mem
,vsz
,rss
,tt
,state
,start
,time
, иcommand
.-u
опция подразумевает-r
опция.
sed
Предупреждения не сгенерированы для неиспользованных меток. В устаревшей работе они.
Когда
y
функция указана (например,sed y/string1/string2/
), удвоенные наклонные черты влево не преобразовываются в единственные. В устаревшей работе они. Для предотвращения этой проблемы используйтеs
функция вместо этого.вид
Форма
sort +POS1 -POS2 ...
больше не поддерживается. Например:bash-3.1$ cat data
b a
a b
bash-3.1$ sort data
a b
b a
bash-3.1$ sort +1 -2 data
sort: invalid option -- 2
Try `sort --help' for more information.
Форма
sort -k POS1,POS2
может использоваться для достижения того же эффекта, но отметить, что поле и позиции символа пронумерованы начиная с 1 (а не 0). Например:bash-3.1$ sort -k 2,3 data
b a
a b
Опции не поддерживаются даже в устаревшей работе, но они могут использоваться посредством следующего обходного решения:
bash-3.1$ _POSIX2_VERSION=200111 sort +1 -2 data
b a
a b
stty
bs[01]
,cr[0-3]
,ff[01]
,nl[01]
,tab[0-3]
, иvt[01]
режимы управления приняты, а такжеocrnl
,ofdel
,ofill
,onlret
, иonocr
(вместе с их инверсиями, такой как-ocrnl
). В устаревшей работе не приняты эти режимы.программа uudecode, программа uuencode
В устаревшей работе,
uudecode(1)
режимы файла масок с0666
, предотвращение создания исполняемых файлов.uudecode
не может изменить режим создаваемого файла, не принадлежащего текущему пользователю (если тот пользователь неroot
). В устаревшей работе,fchmod(2)
позволяет режиму быть измененным.кто
-u
опция вызываетwho(1)
команда для отображения (изодромного с предварением) ID процесса. В устаревшей работе это не делает.xargs
В устаревшей работе,
-L
опция обрабатывает все новые строки как конец строки, независимо от того, пуста ли строка или заканчивается пространством. Кроме того,-L
и-n
опции не являются взаимоисключающими.
Проблемы выполнения
SUSv3 требует многих проверок на ошибки, которые ядро OS X не сделало в прошлом. В результате с неожиданными значениями errno можно встретиться. Поскольку определенная причина (ы) большинства этих значений еще не была задокументирована в страницы соответствующего руководства, Ваш лучший ресурс intro(2)
страница руководства, предоставляющая общие объяснения значений errno.
Несмотря на то, что некоторые вызовы языка C теперь проверяют на состояния ошибки, что не сделали под OS X v.10.4, команды и приложения, скомпилированные для более ранних выпусков OS X (например, OS X v.10.4, OS X v.10.3), не будут затронуты. Изменения вступают в силу, только если программы перекомпилированы на OS X v10.5 (или больше) с целью развертывания OS X v10.5 (или больше).
Цель развертывания может быть поставлена по крайней мере двумя способами. Один путь состоит в том, чтобы установить переменную окружения. Например, в bash(1)
, это было бы похоже на это:
export MACOSX_DEPLOYMENT_TARGET=10.5 # Build for use on OS X v.10.5 |
export MACOSX_DEPLOYMENT_TARGET=10.4 # Build for use on OS X v.10.4 |
export MACOSX_DEPLOYMENT_TARGET=10.3 # Build for use on OS X v.10.3 |
Также цель может быть передана компилятору как параметр командной строки, как показано сюда:
gcc -mmacosx-version-min=10.5 ... # Build for use on OS X v.10.5 |
gcc -mmacosx-version-min=10.4 ... # Build for use on OS X v.10.4 |
gcc -mmacosx-version-min=10.3 ... # Build for use on OS X v.10.3 |
Copyright © 2015 Apple Inc Все права защищены. Условия использования | Политика конфиденциальности | обновленный: 01.09.2010