Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

11K
10 марта 2008 года
zuze
84 / / 07.03.2008
У меня проблема такая,
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;
}
11K
10 марта 2008 года
zuze
84 / / 07.03.2008
Проблема решена.

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

Я ошибся, подозреваю что размер буфера создаётся ОС или компилятором.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог