-Метки

advanced photoshop №97 2012 (uk) digital foto fotymody №11 2011 love issue #2 2011 outdoor photography issue 134 (christmas 2010) анимированные киски бъюти съемка бьюти-съемка владивосток грибной суп с вином и сливками грим давыдова давыдова ольга детская съемка детская сьемка детская фотосессия детские фотокниги детские фотопроекты диета за 20 дней для дракона до и после фотошопа заказать фотокнигу по тел:2-68-25-98 заказать фотосессию можно по тел: 200-46-45 запеченные овощи под пикантным соусом как похудеть каким будет год тигра кальмар по-пекински кисти для фотошоп кисти для фотошоп скачать бесплатно кисти свадебные книги конкурс краски маски для волос маски для лица моё видео морской скрап набор надписи на день победы новый год открытка на день рождения открытка с разворотом открытки ручной работы полина телегина преображение программирование в си. простые секреты красоты пузирадуга пятница 13-ое рецепт рецепт приготовления рецепты рождественская съемка русский перл свадебная съемка свадебные фотокниги семейная фотосессия скачать бесплатно скрп набор к 14 февраля статьи статья стилист владивосток стилист: полина телегина студийная съемка творческие творческие съёмки тематические фотосессии уроки фотошоп фоны фото фото владивосток фотограф фотограф владивосток фотограф давыдова ольга фотограф: давыдова ольга фотографы владивосток фотожурналы фотокниги во владивостоке фотокниги ко дню рождения фотоконкурс фотомонтаж мужской фотопроект фотопроект для детей фотопроекты фотосесии фотосесии владивосток фотосесиии фотосессии фотосессии во владивостоке фотосессии детей фотосессия фотосессия владивосток фотосессия во владивостоке фотосессия детей фототусовки хэллоуин цветочная фотосессия цветы из бумаги цветы из капрона человека создают его волосы я и друзья

 -Рубрики

 -Поиск по дневнику

Поиск сообщений в Оленька_просто_Оленька

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 09.11.2009
Записей: 795
Комментариев: 100
Написано: 1214


Стиль вызова fork

Понедельник, 16 Ноября 2009 г. 12:11 + в цитатник
what_me: Стиль вызова fork
Все знают, что при вызове системных функций необходимо проверять был ли вызов успешен. Обычно при успешном вызове фуцнкции возвращают true, а при неудаче false, и вызовы оформляются в стиле "сделай или умри":

mkdir "Новая
папка(2)" or
die "Can't mkdir:
$!";

В случае с fork так написать не получается, потому что при успехе для ребенка она возвращает 0, который нужно отличать от undef возвращаемого при неудаче. Приходится писать уродливые конструкции из if(...){...} elsif(...){...} else{...};. Так писать мне не нравится, потому что трудно обосновать выбор что в первом условии проверять, что во втором, а что оставить без проверки на третий блок. Сейчас обкатываю такой вариант записи:

#!/usr/bin/perl -l --

use strict;

use warnings;



defined (

my $pid =
fork ) or
die "Can't fork:
$!";



if ($pid) {

print
"parent"

}

else {

print
"child";

}


Update: Все таки да, так будет лучше:

my $pid =
fork;

die "Can't fork:
$!" unless
defined $pid;

Для случаев когда форков много или код используется во многих местах удобно оформить вызов внутри процедуры

Три варианта:

1) Вставить die unless defined $pid между fork и if

2) sub myfork { my $pid = fork; die unless defined $pid; return $pid; }

3) sub myfork { my ($parent, $child) = @_; my $pid = fork; die unless defined $pid; $pid ? &$child() : &$parent($pid); }

И если при неудачном форке мы хотели бы иметь возможность не умирая повторить попытку, то вот пример

Важно проверять причину ошибки при форке. Так, например, получив ошибку EAGAIN (нехватка ресурсов), можно решить проблему и повторить вызов fork.
Записать можно разными способами, зависит от архитектуры программы. В общем и самом нагладном случае примерно так:

use Errno qw(EAGAIN);
FORK: {
if (my $pid = fork) {
say "parent";
} elsif (defined $pid) {
say "child";
} elsif ($! == $EAGAIN) {
# solve problem
redo FORK;
} else {
die "Can't fork: $!";
}
}

Рубрики:  On Perl — блог о языке программирования Perl
Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку