Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: ceco91 в Feb 01, 2012, 00:34



Титла: Проблем със сериен порт
Публикувано от: ceco91 в Feb 01, 2012, 00:34
Здравейте,
Опитвам се да подкарам един Фискален апарат/Фискален принтер да работи под Linux като за целта съм написал едно приложение на C++. Та проблема ми е в четенето от серийния порт - не работи.
Код:
	fd = open(path.c_str() , O_RDWR | O_NOCTTY | O_NDELAY);
if ( fd == -1 ){
throw Exception("open_port: Unable to open " + path + "!");
}
fcntl(fd, F_SETFL, FNDELAY);
struct termios options;
tcgetattr(fd, &options);
struct termios newkey;
    newkey.c_cflag = transferSpeed(speed) | CS8 |  CREAD | CLOCAL;
    newkey.c_iflag = 0;
    newkey.c_oflag = 0;
    newkey.c_lflag = 0;       //ICANON;
    newkey.c_cc[VMIN]=1;
    newkey.c_cc[VTIME]=10;
if( tcsetattr(fd, TCSANOW, &newkey) ) {
throw Exception("Can't setup communication parameters!\n");
}
tcflush(fd, TCIFLUSH);
tcflush(fd, TCOFLUSH);
rbytes = 0;
wbytes = 0;

Четенето го извършвам символ по символ.
Код:
	char buf;
int bytes = read( this->fd, &buf, sizeof(char) );


Титла: Re: Проблем със сериен порт
Публикувано от: shoshon в Feb 01, 2012, 01:09
Не знам каква грешка ти дава, защото ни си показал никаква информация от дебъгване.
Все пак:

Цитат
int bytes = read( this->fd, &buf, sizeof(char) );

и ( от документацията )

Цитат
ssize_t read(int fildes, void *buf, size_t nbyte);

Хайде да открием разликите. Жокер:

Колко байта четеш?
Колко е размера на буфера?