Функция sleep не даёт выводить данные, почему так?

Модератор: Модераторы разделов

Ответить
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Функция sleep не даёт выводить данные, почему так?

Сообщение жучара »

Друзья! Это, может, глюк у меня такой?

Код: Выделить всё

#include <stdio.h>
int main (void)
{  
        
   while (1)
   {    
      printf ("=== ");
      sleep (1);
   }
   return 0;
} 
экран будет пустым! Почему-то sleep (1); не даёт вывести строку ===

А вот так выводит:

Код: Выделить всё

#include <stdio.h> 
int main (void)
{  
   while (1)
   {    
      printf ("=== ");
      fflush (stdout);
      sleep (1);
   }
   return 0;
} 
Также выводит строку, если в ней будет символ переходя на другую строку, то есть "===\n"

Но всё равно непонятно поведение sleep. man sleep ничего не даёт, естессно. Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение Bizdelnick »

А с чего Вы взяли, что дело в sleep()? printf() — функция буферизованного вывода, если stdout — терминал, то выводится текст построчно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3667
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение devilr »

К тому же неплохо бы добавить
#include <unistd.h>
в случае linux
и
#include <windows.h>
в случае винды
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение жучара »

Bizdelnick писал:
09.04.2018 21:22
А с чего Вы взяли, что дело в sleep()? printf() — функция буферизованного вывода, если stdout — терминал, то выводится текст построчно.
Он не выводится.

Код: Выделить всё

/*main.c*/
#include <stdio.h> 
int main (void)
{  
   while (1)
   {    
      printf ("=== ");
      sleep (1);
   }
   return 0;
}

Shell

user@astra:~/Desktop$ gcc main.c
user@astra:~/Desktop$ ./a.out
Я просто читаю маны.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение NickLion »

жучара
потому что строка ещё не сформирована, строка сформирована, когда будет \n.
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3667
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение devilr »

Код: Выделить всё

#include <stdio.h>

#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif

int main (void)
{  
    int n= 0;

    while (1)
    {
        if(n < 10)
        {
            n++;
        }
        else
        {
            n=0;
            printf("\n");
        }
        printf ("=== ");
        sleep (1);
    }
    return 0;
} 
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
MiK13
Сообщения: 1179
ОС: Linux Debian

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение MiK13 »

NickLion писал:
09.04.2018 21:57
жучара
потому что строка ещё не сформирована, строка сформирована, когда будет \n.
Или заполнится буфер.
Опытным путём проверил, что размер буфера -- 1024 байта. У меня на Debian 8 amd64.
Возможно на другой системе он может иметь другой размер
Спасибо сказали:
Ответить