[RS232] auslesen bis '\0'
-
Hallo,
habe folgendes Problem, möchte über die Serielle nen String empfangen aber nur bis '\0'.
Problem an der ganzen Sache ist, das ich irgendwie keine Idee hab wie ich das machen soll.
Hab mit read() rumgespielt und soweiter hatte es auch kurzzeitig mal am laufen, dann war es aber so das er mir den String nich korrekt ausgelesen hat manchmal.
Mal hats geklappt mal nicht.Hab mir die Tuts etc hier schon in der FAQ durchgelesen hab auch das Buch dazu aber mal ehrlich, nirgends wird das richtig beschrieben wofür was ist.
Und manches ist sehr Umständlich.
Naja ich hoff mir kann wer helfen.
Danke
-
Also ich versuchs mal in deinem Stil rüberzubringen.
Weisst du, du musst dass so machen, also du willst ja den String lesen bis '\0' quasi, mit read() geht das auch. Lies den String ein, du weisst ja wie es geht. Wenn du '\0' liesst dann musst du, weil du den String ja nur bis '\0' lesen willst. Also hörst du bei '\0' auf.
Alles klar?
-
So also das weiß ich, hab ich auch realisiert problem ist nur, das wenn ich einen string sende:
"ich bin doof"
beim ersten Lesedurchgang gehts gut:
Ausgabe: Ich bin doof
beim zweiten:
Ausgabe: c bin doof
beim dritten:
Ausgabe: ich bin doof
Mein Code:
char tmp[255]; int nbytes; [...] if (fd <0) { perror(MODEMDEVICE); exit(-1); } tcgetattr(fd,&oldtio); /* save current port settings */ bzero(&newtio, sizeof(newtio)); newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR | IXON | IXOFF; newtio.c_oflag = 0; /* set input mode (non-canonical, no echo,...) */ newtio.c_lflag = 0; tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); for(;;) { while((nbytes = read(fd, tmp, sizeof(tmp)),0)) > 0) { puts(tmp); if(tmp[strlen(tmp)-1] == '\0') break; } } tcsetattr(fd,TCSANOW,&oldtio); printf("Fertig\n"); return 0; }
So aber irgendwie funzt das alles net :)---
Wäre wirklich nett wenn mir jemand auf die Sprünge helfen würde.
-
du weisst, dass strlen und puts darauf angewiesen sind, dass du einen normalen C String übergibst, also mit null-Terminierung? Falls du also nicht bis 0 liest, erzeugst du undefiniertes Verhalten. Btw. read gibt die Anzahl der gelesenen bytes zurück, so kannst du das Problem lösen.