Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет dibr ([info]dibr)
@ 2012-02-01 22:40:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
SYSTEM(3)
       man system

       [...]

       PORTABILITY
       ANSI C requires `system', but leaves the nature and effects of a command processor undefined. ANSI C does, however, specify that `system(NULL)' return zero or nonzero to report on the existence of a command processor.

       POSIX.2 requires `system', and requires that it invoke a `sh'. Where `sh' is found is left unspecified.


     Радуют иногда маны. ANSI C требует, чтобы вызов system() существовал, но не описывает, что именно он должен делать. Тем не менее, стандарт требует, чтобы можно было проверить, делает ли что-то system(), вызвав system(NULL). POSIX.2 требует, чтобы при использовании system() вызывался 'sh', но не говорит, где брать sh (особенно в windows NT, которая сертифицирована по POSIX (правда, POSIX.1), но никакими sh в которой и не пахнет).
     Особенно радует, что всё это я выяснил, перетаскивая мелкую счётную программку самого конца прошлого века (ещё под дос) под cygwin. Некрокомпьютинг рулит, да :-)


(Добавить комментарий)


[info]nicka_startcev@lj
2012-02-01 15:58 (ссылка)
А зачем цигвин, когда есть мингв?
цигвин нужен только для быстрого порта на вин32/вин64 какого-нибудь мутного линуксового софта, который лень аккуратно дотачивать. Если же софт аккуратный, то на мигв (без цигвинистого окружения) будет лучше.

Обычно, под виндой шел выбирается правильно, cmd.exe :)

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-02-01 16:09 (ссылка)
Цигвин там исторически уже есть (для мелких юниксовых утилиток), а mingw надо ещё ставить. Хотя да, надо бы в самом деле поставить - цигвин "для общего применения" тяжеловат :-)

(Ответить) (Уровень выше)


[info]dimas@lj
2012-02-01 16:42 (ссылка)
:) это еще ничего ... я как-то перетаскивал из-под доса в ОС/2 несколько утилит (фидошных, для тех кто помнит) ... так вот наплясался я ... и работа с каталогом по другому работала, но самый цирк был с другой работой с переменным числом параметров в функции - компилировалось, но глючило забавно ... оригинал был написан под борланд, а перетаскивался под ватком, да ...

а какие иногда бывают забавные глючки в компиляторах на стыках С и С++, где разное поведение по стандарту ...

(Ответить)


[info]blacklion@lj
2012-02-01 16:58 (ссылка)
NT Сертифицирована по POSIX в POSIX Subsystem, которая такая же Subsystem поверх ядра как и Win32. И там есть sh. Только эти subsystems изолированы друг от друга.

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2012-02-01 17:15 (ссылка)
А там точно есть sh? Просто подсистемы-то изолированы, но FS общая, а файла с именем "sh" я в NT не припомню. Хотя, конечно, мог и не заметить, или могли сделать чтобы sh был, а файла - не было...

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]blacklion@lj
2012-02-01 17:19 (ссылка)
Эта подсистема покупается за отдельные деньги, вообще-то. Ну, в какой-то момент её стали бесплатно раздавать, но всё равно надо качать и ставить отдельно. sh там своеобразный — сильно изуродованный ksh.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dibr@lj
2012-02-01 17:28 (ссылка)
А. Ну тогда - "буду знать" :-)

(Ответить) (Уровень выше)


[info]demon_nn@lj
2012-02-02 12:14 (ссылка)
Подтверждаю. Сам ставил эту (http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_UNIX) штуку.
Умельцы даже вытворяли с ней весьма извращенные вещи (http://alter.compot.ru/forum/threads/35141-C%D1%82%D0%B0%D1%82%D1%8C%D1%8F-%D0%BE-Interix-!) (к сожалению, оригинал статьи уже закрыт).

(Ответить) (Уровень выше)


[info]ilya_314@lj
2012-02-01 18:42 (ссылка)
Я некоторое время назад с компиляцией и исполнением в среде unix в windows занимался. Там довольно все интересно - у них раньше действительно был POSIX от которого пользы вобщем почти не было. Была такая штука - Windows Services for UNIX, она позволяла в этой подсистеме поиметь шелл, компилятор и пр. фигню. И вобщем даже работало. Однако позднее они поняли, что надо выкидывать из ядра нафиг эти POSIX-овые поделки и пошли другим путем. Купили у компании Interix надстройку над Win32, которая в user-mode имитировала из себя UNIX API - и это неплохо работало. Иинтересно, что там обычные dll можно использовать в качестве библиотек. Эту штуку можно врубить в Windows 7 (там оно само вроде докачается с сайта), называется Subsystem for UNIX-based Applications (SUA). После установки можно миксовать UNIX утилиты и Windows в обычной консоли. Кстати там на уровне настроек этой подсистемы можно менять поведение с регистром в названиях файлов - можно сделать, чтобы UNIX процессы работали с файлами как и Windows.

Это использовали, компилировали в gcc и запускали код приложения. Но потом отказались от этого, т.к. от заказчика пришла виртуальная машина и пришлось все делать в ней.

(Ответить)