Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 26.09.2007
Откуда: берутся дети?
здравствуйте! подскажите, пожалуйста, в чем баг:

есть сервер который открывает
int fd = open( "LOG.txt", O_WRONLY | O_NDELAY )
канал(заранее созданный) и пишет в него
некоторые данные(через write(...))

и есть клиент, который читает из fifo:

Код:
#include <iostream>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
using namespace std;

int main()
{
  int fd;
  char buff[256];
  if( (fd = open( "LOG.txt", O_RDONLY )) < 0)
  {
    cout << "error opening of fifo" << endl;
    return -1;
  }
  int num = read( fd, buff, 20 ); //читаем 20байт
  buff[21]= '\0'; //признак конца строки
  cout << buff << endl; //выводим что прочитали - а в итоге почему-то выводятся как будто \n\n
  cout << "got "<< num <<" bytes"<<endl; //а вот тут правильно отображается - got 20 bytes
  close(fd);
  return 0;
}

почему-то вывод выглядит
Код:


got 20 bytes

то ли данные неправильно читаются, то ли я не могу вывести содержимое буфера

пс проблема в сервере маловероятна - так как если пытаться писать не в fifo а в обычный файл(сначала открыть через (fd = open( ''LOG.txt", O_RDWR | O_APPEND | O_CREAT, S_IWRITE | S_IREAD )) - то файл заполняется нужными байтами
Добавлено спустя 1 час, 18 минут, 49 секунд
tenzor писал(а):
здравствуйте! подскажите, пожалуйста, в чем баг:

есть сервер который открывает
int fd = open( "LOG.txt", O_WRONLY | O_NDELAY )
канал(заранее созданный) и пишет в него
некоторые данные(через write(...))

и есть клиент, который читает из fifo:

Код:
#include <iostream>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
using namespace std;

int main()
{
  int fd;
  char buff[256];
  if( (fd = open( "LOG.txt", O_RDONLY )) < 0)
  {
    cout << "error opening of fifo" << endl;
    return -1;
  }
  int num = read( fd, buff, 20 ); //читаем 20байт
  buff[21]= '\0'; //признак конца строки
  cout << buff << endl; //выводим что прочитали - а в итоге почему-то выводятся как будто \n\n
  cout << "got "<< num <<" bytes"<<endl; //а вот тут правильно отображается - got 20 bytes
  close(fd);
  return 0;
}

почему-то вывод выглядит
Код:


got 20 bytes

то ли данные неправильно читаются, то ли я не могу вывести содержимое буфера

пс проблема в сервере маловероятна - так как если пытаться писать не в fifo а в обычный файл(сначала открыть через (fd = open( ''LOG.txt", O_RDWR | O_APPEND | O_CREAT, S_IWRITE | S_IREAD )) - то файл заполняется нужными байтами


всё пучком, разобрался :) тему можно удалять

_________________
"если бы люди не делали глупостей, ничего умного бы так и не появилось."



Партнер
 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Так а в чем проблема-то была?

_________________
Ку ку


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan