The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
c - read(), !*! kosh, 05-Ноя-09, 15:54  [смотреть все]
Возник вопрос правильно ли такое
    char str[50]
    while ( (n = read(sockfd, str, 49)) > 0)
          {
             str[n]='\0';
             printf("%s",str);
          }

или лучше так

    char str[5]
    while ( (n = read(sockfd, str, 1)) > 0)
          {
             str[n]='\0';
             printf("%с",str[0]);
            
          }

))) или все равно и так и так

  • c - read(), !*! shadow_user, 16:32 , 05-Ноя-09 (1)
    Разницы вроде как нет, а вот во втором случае для каждого символа делается системный вызов, соответственно скорость выполнения понижается.
  • c - read(), !*! angra, 17:21 , 05-Ноя-09 (2)
    И так и так не оптимально :)
    • c - read(), !*! Andrey Mitrofanov, 17:31 , 05-Ноя-09 (3)
      >И так и так не оптимально :)

      И неправильно, потому что NUL-и во входном потоке "всё портят".

      ...и нет, в "постановке" задачи не говорилось, что входжные данные такие или эдакие.

  • c - read(), !*! аноним, 23:05 , 05-Ноя-09 (4)
    Во втором случае не понятно, зачем вообще массив и '\0'. Кроме того, будет работать крайне неэффективно.

    Первый правильный, за исключением того, что если в потоке будут нули, куски строк не будут выведены.

    Лучше так:

    char str[50]
    while ((n = read(sockfd, str, 50)) > 0)
        write(STDOUT_FILENO, str, n);




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру