Проблемы с буфером в PIPE (gcc 3.2.2)

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

zuze
Сообщения: 27
ОС: Red Hat

Проблемы с буфером в PIPE

Сообщение zuze »

У меня проблема такая,
write должен возвращать 4, а он возвращает 6
и read показывает Hi123456, а должна Hi1234, так как остальное перебор.

Подскажите пожалуйста, что я не так сделал?

Вот код

#include <stdio.h>
/* Прототипы функций write() */
#include <sys/types.h>
/* Прототип функции pipe() */
#include <unistd.h>

int main(void)
{
/* Дискрипторы pipe */
/* fd[0] - файловый дескриптор, соответствующий входной поток данных */
/* fd[1] - файловый дескриптор, соответствующий выходной пото/* к данных */
int fd[2];
/* Буфер pipe */
char writebuffer[6] = "Hi";
int size;
pid_t childpid;
char readbuffer[8];

/* Попытаемся создать pipe */
if (pipe(fd) < 0)
{
/* Если создать pipe не удалось, печатаем об этом сообщение и прекращаем работу */
printf("Can\'t create pipe\n");
exit(-1);
}

if ((childpid = fork()) == -1)
{
printf("Can\'t create potomka\n");
exit(-1);
}

if (childpid == 0)
{
/* Закрываем входной поток потомка*/
if (close(fd[0]) < 0)
printf("Can\'t close input stream\n");
/* Запись в канал */
/* Записывается столько байт, сколько осталось до заполнения канала.
функция write() возвращает количество записанных байт */
write(fd[1], writebuffer, strlen(writebuffer));
size = write(fd[1], "123456", strlen("123456"));

/* Вывод на экран количество записанных байт */
printf("Number byte: %d\n", size);

/* Закрываем выходной поток */
if (close(fd[1]) < 0)
printf("Can\'t close output stream\n");
}
else
{
close(fd[1]);
read(fd[0], readbuffer, 8);
printf("%s\n", readbuffer);
}

/* Завершение работы */
return 0;
}
Спасибо сказали:
zuze
Сообщения: 27
ОС: Red Hat

Re: Проблемы с буфером в PIPE

Сообщение zuze »

Проблема решена.

Я думал когда первый раз задал массив для записи char[6] = "Hi", автоматически создаётся буфер для pipe на 6 символов.

Я ошибся, подозреваю что размер буфера создаётся ОС или компилятором.
Спасибо сказали: