C++ unter QNX

Hallo zusammen,

ich muss ein Bluetoothadapter über serielle schnittstelle unter QNX anspreschen,der Bluetoothadapter soll auf AT-Befehle reagieren,alles fonktioniert soweit,aber das problem liegt bei mir darin an der read() Funktion,bekomme ich eine komische zahl als Rückgabe nbytes = -14252556!!
hat jemand eine Idee warum das nicht funktioniert !!

#include /* Standard input/output definitions */
#include //OUT8…
#include //THREAD
#include /* File control definitions */
#include
#include /* String function definitions */
#include
#include /* POSIX terminal control definitions */
#include
#include
#include
#include
#include
#include
#include
#include /* Error number definitions */
#include
#include
#include
#include /* UNIX standard function definitions */
#include
#include
#include //need for uintptr_t type
#include
#include
#include

struct termios options;

void open_port(int i,int BAUDRATE,char senbuffer[200]);

int main(int argc, char *argv[]) {

int cPort= 0;
int BAUDRATE =0 ;
char senbuffer[200];
String b(„B“);

std::cout > BAUDRATE;
b + BAUDRATE;
std::cout > cPort;
std::cout >senbuffer;

strcat(senbuffer,"\n");

std::cout even */

options.c_cflag &= ~CSTOPB;
/* Set 1 Stopbit */

options.c_cflag &= ~CSIZE;
/* Mask the character size bits */

//keine Paritaet
options.c_cflag |= CS8;
/* Select 8 data bits */

//Disable hardware flowcontrol
// options.c_cflag |= CRTSCTS;

//options.c_cflag |= CNEW_RTSCTS; /* Also
called CRTSCTS */

//Raw Data Ausgabe
options.c_oflag &= ~OPOST;
options.c_oflag |= ONLCR;

//Raw data Einlesen mit Parity-check
// options.c_lflag &= ~(ICANON | ECHO | ECHOE |
ISIG);

// options.c_lflag &= ~(ICANON |ISIG);
// options.c_iflag |= (INPCK | ISTRIP);

//cfmakeraw (&options); // real raw!

//Software flowcontrol ausschalten
options.c_iflag |= (IXON | IXOFF | IXANY);

//Neue Einstellungen sofort auf Port übertagen
tcsetattr(fd, TCSAFLUSH, &options);

if (tcsetattr(fd, TCSAFLUSH, &options) != 0)
{
perror(„terminal: tcsetattr() failed“);
}

printf(„Einstellungen wurden gespeichert\n“);

//Puffer leeren
tcflush(fd, TCIFLUSH);

flushall();

n = write(fd, senbuffer, strlen(senbuffer)); //Writing
data to the port

tcdrain(fd); //warten, bis alles gesendet.

std::cout

problem liegt bei mir darin an der read() Funktion,bekomme ich
eine komische zahl als Rückgabe nbytes = -14252556!!

char recbuffer[200]; /*reciev buffer*/

nbytes=read(fd,recbuffer,strlen(recbuffer));

Das ist eine äußerst schlampige Programmierung! Welchen Wert hat denn strlen(recbuffer)? Offensichtlich hängt der von der Initialisiertung von recbuffer ab. Und diese gibt es nicht. recbuffer[200] ist mit den zufälligen Werten initialisiert, die man auf dem Stack an dieser Stelle findet.

Wahrscheinlich wurde nbytes (und anderes) auf Grund eines willkürlichen Wertes von strlen(recbuffer) überschrieben.

Wenn read so

size_t read(int fildes,void *buf,size_t nbyte);

deklariert ist, dann sollte das dritte Argument die Zahl der Bytes, die man empfangen kann und möchte, darstellen, also z.B.

nbytes=read(fd,recbuffer,sizeof(recbuffer));