Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> exit, close вопросы на понимание, не пойму логику 
:(
    Опции темы
DissDoc
Дата 6.6.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



Доброе время суток всем. После начала разбора системных вызовов появились еще некоторые вопросы. Собственно код мне не нужен, если нетрудно - объясните пожалуйста логику вызова функций.
1. В случае работы с dub
Код

int fdescr, fdescr2 = 0;
fdescr = open("ttt.txt", O_RDWR|O_TRUNC);
printf("descriptor #1 is %d\n", fdescr);
write(fdescr, "Test", 4);
fdescr2 = dup(fdescr);
printf("descriptor #2 is %d\n", fdescr2);
write(fdescr2, " by ", 4);
close(0);

Почему здесь close(0). Т.е. почему именно 0,а  не что-то другое? (да что может быть там другое?)

2. С работой fork()
a)
Код

if (fork() != 0) exit(0);

b) 
Код

if (fork() == 0) exit(0);

Вот в этих случаях почему 0 в exit? Я пробовал - вижу что происходит! Но exit и close никак не пойму (((
PM MAIL WWW   Вверх
MAKCim
Дата 6.6.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(DissDoc @  6.6.2007,  09:01 Найти цитируемый пост)
Почему здесь close(0). Т.е. почему именно 0,а  не что-то другое? (да что может быть там другое?)

нужно
Код

close(fdescr);
close(fdescr2);

вообще вопрос странный: почему нужно что-то одно, а другое не нужно
что требуется в программе, то и нужно делать
Цитата(DissDoc @  6.6.2007,  09:01 Найти цитируемый пост)
Вот в этих случаях почему 0 в exit? Я пробовал - вижу что происходит! Но exit и close никак не пойму ((( 

а почему не должен быть 0?
если fork() завершается с ошибкой тогда
Код

if (fork() < 0) _exit(errno);



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
DissDoc
Дата 6.6.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 13.7.2006

Репутация: нет
Всего: нет



 smile Не вопрос не в том. Можно проще.
Что значит exit(0); close(0);
И еще я где-то еще видел exit(4, 2); Вопрос тот же - что значит?
PM MAIL WWW   Вверх
HappyCoder
Дата 6.6.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.5.2007

Репутация: нет
Всего: нет



Сам не понимаю, почему close(0). close закрывает дескриптор файла - значит, надо передавать этой функции дескрипторы. Проверь через perror("close");

exit(0) - завершение процесса произошло по нормальной причине
exit(1) или exit(-1) - процесс завершился с ошибкой

По поводу exit подробней написано в
Код

man 3 exit

PM MAIL   Вверх
MAKCim
Дата 6.6.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(HappyCoder @  6.6.2007,  09:22 Найти цитируемый пост)
exit(1) или exit(-1) - процесс завершился с ошибкой

1. exit(errno)
2. отрицательные коды ошибок используются в ядре

Добавлено через 2 минуты и 35 секунд
Цитата(DissDoc @  6.6.2007,  09:21 Найти цитируемый пост)
Что значит exit(0); close(0);

exit(0) - завершение процесса с нулевым кодом возврата + вызов всех функций, которые были зарегистрированы средой
close(0) - в общем смысле - уменьшение счетчика ссылок на открытый файл и его удаление в случае если этот счетчик после очередного уменьшения стал нулевым


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
BlackStar
Дата 7.6.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 13.12.2006

Репутация: 2
Всего: 5



man stdin 

stdin = 0
stdout = 1
stderr = 2

close(0) == close(stdin)

Зачем он нужен в приведенном куске кода, понятия не имею.

Это сообщение отредактировал(а) BlackStar - 7.6.2007, 11:50
PM MAIL Jabber   Вверх
MAKCim
Дата 7.6.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(BlackStar @  7.6.2007,  11:49 Найти цитируемый пост)
close(0) == close(stdin)

stdin имеет тип FILE*
так что close(STDIN_FILENO) или fclose(stdin)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Nil
Дата 7.6.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 15.4.2007

Репутация: нет
Всего: нет



MAKCim
А разве STDIN_FILENO не макрос который в итоге даст тот же 0 ?
----
Добавлено:
Прошу прощения, не верно прочитал предыдущий пост.

Это сообщение отредактировал(а) Nil - 7.6.2007, 12:35
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.