Seriellen String mit C empfangen

Gast #3092849
Lesenswert?

Hallo zusammen!

Ich bin gerade dabei ein kleines Programm in C zu schreiben um einen 
String, der an der seriellen Schnittstelle ankommt zu empfangen. Der 
String ist maximal 160 Bytes lang. Das Öffnen des Ports und 
initialisieren funktioniert soweit, jedoch komme ich beim String nicht 
weiter.

Hier mal ein Ausschnitt, wie es bis jetzt läuft (allerdings werden hier 
nur einzelne Bytes empfangen):
1
void readdata(int iFd){
2
  char buf[160];
3
  int res=0;
4

5
  res = read(iFd,(char *)buf,160);
6
  
7
  printf("readfunction %d \n", res);
8

9
  if(res == -1) {
10
    printf("read was unsuccesfull\n");
11
    buf[0]='\0';
12
  }
13
  else {
14
    buf[res]='\0';
15
    printf("read succesfull\n",buf);
16
    printf("read:%s\n",buf);
17
  }
18
  printf("values read(printf):%s\n",buf);
19
}

Ich scheitere momentan am Zusammensetzen der einzelnen Bytes zu einem 
String. Vielleicht kann mir jemand an einem kleinen Beispiel das 
Vorgehen erklären; ich bin Anfänger in Sachen C.

Vielen Dank schonmal!

Grüsse, Mike
#3092929
Lesenswert?

Hallo Mike

Eigentlich gehören da noch ein paar Infos dazu. Du schreibst ja im 
PC-Forum, also gehe ich davon aus, dass Du ein PC-Programm schreibst. Um 
welches C handelt es sich denn?

1
#define BUFSIZE 160
2

3
void readdata(int iFd)
4
{
5
  char buf[BUFSIZE];
6
  char c;
7
  int  res;
8
  int  n = 0;
9

10
  do {
11
    res = read(iFd, (char *)&c, 1);  // Teste, ob ein Byte da ist
12
    
13
    if (res < 0) {                   // Falscher Fehler
14
      n = 0;                         // Anzahl Bytes zurücksetzen
15
      break;                         // abbrechen
16
    }
17

18
    if (res == 1 && c > '\0') {      // alternativ auf >= ' ' testen
19
      buf[n++] = c;                  // gültiges Byte in den Buffer
20
    }
21
  } 
22
  while (n< BUFSIZE-1 && c != '\0'); // Stringende erreicht
23
  buf[n] = '\0';                     // abschliessende Null anhängen
24

25
  if (res < 0) {
26
    printf("read was unsuccesfull\n");
27
  }
28
  else {
29
    printf("read succesfull\n");
30
    printf("read: %s\n", buf);
31
  }
32
  printf("bytes: %d\n", n);
33
}

Das Beispiel ist nicht getestet. Es hat keinen Timeout und bleibt in 
einer Endlosschleife, falls keine Daten mehr kommen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren