Forum: PC-Programmierung Serieller Port unter Linux


von lugge (Gast)


Lesenswert?

Hallo, beim Versuch einen seriellen Port mittels gcc unter Linux 
anzusprechen bekomme ich beim ausführen des Programms einen Fehler:
1
*** invalid open call: O_CREAT without mode ***: ./serial terminated

Was sagt mir dieser Fehler aus?

Schuld ist die Zeile
1
tcgetattr (port, &oldConfig)

definiert sind die Parameter als:
1
struct termios oldConfig;
2
FILE *port;

Bin bischen ratlos, irgendjemand ne Idee?

Grüße,
lugge

von Peter II (Gast)


Lesenswert?

und wo ist das open?

von lugge (Gast)


Lesenswert?

Peter II schrieb:
> und wo ist das open?

Beim Rest des Programms, was aber korrekt läuft ohne den tcgetattr() 
Aufruf.

Aber bitte:
1
# include <stdio.h>
2
# include <unistd.h>
3
# include <fcntl.h>
4
# include <termios.h>
5
#include <stdlib.h>
6
#include <string.h>
7
8
struct termios newConfig;
9
struct termios oldConfig;
10
11
12
void main(void) {
13
14
  FILE *port;
15
16
  port = open ("/dev/ttyUSB0", "rw");
17
18
  if (port != -1)
19
  {
20
    printf("Port geöffnet!\n");
21
  }
22
  else
23
  {
24
    printf("Port nicht gefunden!\n");
25
    return;
26
  }
27
28
29
  /*
30
   * saving the ports old config
31
   */
32
  if (tcgetattr (port, &oldConfig) == NULL)
33
  {
34
    printf("Port Config konnte nicht gesichert werden!\n");
35
    return;
36
  }
37
}

von Der Weise (Gast)


Lesenswert?

lugge schrieb:
> port = open ("/dev/ttyUSB0", "rw");
Das kann nicht funktionieren. open() möchte einen Integer als 2. 
Parameter, der die Flags zum öffnen angibt, z.B. O_RDONLY, O_WRONLY, 
O_RDWR.

von lugge (Gast)


Lesenswert?

Stimmt, mein Fehler.
Kommt wohl daher dass ichs vorher schon mal mit fopen() gearbeitet habe.

Habe aus dem FILE * ebenfalls einen int gemacht, weil tcgetattr einen 
int erwartet.

Höchsten Dank dafür, läuft :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.