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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> принцип работы sleep() 
:(
    Опции темы
ressac
Дата 28.10.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main() {
int pid = 0, status = 0;
if ((pid = fork()) == -1) {
printf("Error\n");
exit(1);
}
if (pid == 0) { 
printf("2 sec sleep\n");

int x;
for(x=0;x<10;x++) printf("."); //вот этот фор сработает после того как программа выйдит из сна
                                               //а вот если просто printf() впихнуть вместо фора, тогда всё ок, покажет до сна всё

sleep(2);
exit (1);
}
else { 
wait(&status);
printf("\nstatus %d\n", status);
exit (0);
}
}


код проверял под убунтой
PM MAIL   Вверх
MAKCim
Дата 28.10.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



ressac
буферизация 
поставь после лупа fflush(stdout);


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

PM MAIL   Вверх
ressac
Дата 29.10.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



большое спасибо, только вот причём тут буффер?
не понимаю, можно подробней или ссылку где ясно просто это написано? smile

спасибо заранее
PM MAIL   Вверх
mes
Дата 29.10.2009, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(ressac @  28.10.2009,  23:37 Найти цитируемый пост)
большое спасибо, только вот причём тут буффер?

дело не в sleep, a в буфферизации потока вывода (в  консоль).


--------------------
PM MAIL WWW   Вверх
ressac
Дата 29.10.2009, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



тойсть , если я правильно понял, буфер ввыода не заполнился до конца а sleep() вступил в ход уже? smile
PM MAIL   Вверх
mes
Дата 29.10.2009, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(ressac @  29.10.2009,  01:07 Найти цитируемый пост)
тойсть , если я правильно понял, буфер ввыода не заполнился до конца а sleep() вступил в ход уже? 

представьте, что есть резервуар из которого идет поливка огорода.. Вы туда воду ведрами наливаете, а она постепенно в огород сливается..
Ну так Вы уже 10 ведер налили (printf), а в огород (на консоле) только 6 вылилось.. Пока Вы устраивали себе отдых (sleep) вылился  и остаток..
но если хочется гарантированного опустошения резервуара, можно конечно и ускорить слив :
Цитата(MAKCim @  28.10.2009,  19:51 Найти цитируемый пост)
fflush(stdout); 

Пример конечно грубоват, но на ночь лучший в голову не идет smile



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


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


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

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



Цитата(mes @  29.10.2009,  02:34 Найти цитируемый пост)
Пока Вы устраивали себе отдых (sleep) вылился  и остаток..
но если хочется гарантированного опустошения резервуара, можно конечно и ускорить слив :

ну не совсем так
printf не работает если уж на то пошло в отдельном потоке/процессе
и дергает write после того, как в буфере накапливается определенное количество данных
в данном случае к fflush приводит вызов exit
Цитата(man 3 exit)

All open stdio(3) streams are flushed and closed.  Files created by tmpfile(3) are removed.

если бы его не было и больше printf/fflush не вызывались, ничего бы на консоль не вывелось до завершения процесса не через _exit

Цитата(mes @  29.10.2009,  02:34 Найти цитируемый пост)
Пример конечно грубоват, но на ночь лучший в голову не идет 

Код

setvbuf(stdout, NULL, _IONBF, -1);



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

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


любитель
****


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

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



Цитата(MAKCim @  29.10.2009,  08:20 Найти цитируемый пост)
printf не работает если уж на то пошло в отдельном потоке/процессе

 угу..  пример не очень удачный.. надо будет как нибудь подобрать подходящий пример из жизни..

Это сообщение отредактировал(а) mes - 29.10.2009, 10:12


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

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

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


 




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


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

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