#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;
}
Проблемы с буфером в PIPE
write должен возвращать 4, а он возвращает 6
и read показывает Hi123456, а должна Hi1234, так как остальное перебор.
Подскажите пожалуйста, что я не так сделал?
Вот код
Код:
Я думал когда первый раз задал массив для записи char[6] = "Hi", автоматически создаётся буфер для pipe на 6 символов.
Я ошибся, подозреваю что размер буфера создаётся ОС или компилятором.