URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8502
[ Назад ]

Исходное сообщение
"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 , 05-Ноя-09 16:32 
Разницы вроде как нет, а вот во втором случае для каждого символа делается системный вызов, соответственно скорость выполнения понижается.

"c - read()"
Отправлено angra , 05-Ноя-09 17:21 
И так и так не оптимально :)

"c - read()"
Отправлено Andrey Mitrofanov , 05-Ноя-09 17:31 
>И так и так не оптимально :)

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

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


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

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

Лучше так:

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


"c - read()"
Отправлено angra , 06-Ноя-09 00:26 
Если не знаете, то и не советуйте

"c - read()"
Отправлено dyndns , 06-Ноя-09 09:15 
>Если не знаете, то и не советуйте

А как тогда было бы оптимально? , понятное дело что там где по байтно конец строки не нужен


"c - read()"
Отправлено аноним , 06-Ноя-09 18:58 
>Если не знаете, то и не советуйте

Либо сразу показывай как правильно, либо не высовывайся. Твои "познания" меня уже неоднократно умиляли.


"c - read()"
Отправлено Сергей , 07-Ноя-09 03:33 
>Если не знаете, то и не советуйте

Хм, и как-же, по-вашему, правильно?