нарушение порядка выполнения функций

Тема в разделе "WASM.UNIX", создана пользователем letopisec, 7 авг 2005.

  1. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    Имеется такая вот функция:
    Код (Text):
    1.  
    2. #include <stdio.h>
    3.  
    4. char b[1024];
    5.  
    6. int main ()
    7. {
    8.   printf("_%d_ ", b[0]);
    9.   memset (b, 0, sizeof (b));
    10.   read (0, b);
    11.   printf("%s", b);
    12.   return 0;
    13. }
    14.  




    И такой вот пример работы:
    Код (Text):
    1.  
    2. bash-3.00# ./a.out
    3. blablabla
    4. _0_ blablabla
    5. bash-3.00#
    6.  


    Почему read опережает первый printf?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    fflush( stdout );
     
  3. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    OK спасибо.



    http://www.opennet.ru/docs/RUS/libc/libc-3.html

    Функции вывода stdio могут буферизировать вывод, для минимизации количества лишних системных вызовов.



    Т.е. для надёжности между каждым printf - read, надо втавлять fflush?
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Да, делать fflush( stdout ); после всех printf() когда нужно, что бы данные гарантированно выводились на консоль.
     
  5. ash

    ash New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2004
    Сообщения:
    52
    Адрес:
    Latvia
    Можно отключить буферизацию, man setbuf.