(gelöst) Program als Prozess für ttys0 starten gibt Fehler 'Inappropriate ioctl for device'
-
Hallo Zusammen,
ich versuche derzeit ein Programm,welche Daten über die Serielle Schnittstelle einliest über einen Script als Hintergrundprocess zu starten.
und erhalte einen Fehlermeldung "Inappropriate ioctl for device".
Wenn ich das ganze Programm nicht als Hintergrundprozess starte, klappt das prima.
Da ich innerhalb des Programmes die STDIO auf die serielle Schnittstelle umbiege aber einen Script noch am laufen habe, vermute ich hier das Problem.
Das Programm soll aber als Server im Hintergrund laufen. Nur weiss ich nicht, wie ich das ganze Starten soll.
#!/bin/bash case "$1" in start) echo "Starting erf server" ./erf 2 >> PD/abmeserf & pidof erf > PD/erf.pid ;; stop) echo "Shutting down erf server" killall erf rm PD/erf.pid ;; restart) $0 stop $0 start ;; status) if /sbin/checkproc ./erf 2> /dev/null # if pidof erf > /dev/null then echo "Server erf is up" else echo "Server erf is down" fi ;; esac
Gestartet durch
user@PC-desktop:~/visoprojekt/falco$ ./erf_ start
Starting erf server
Erf task started ...
terminal: tcgetattr() failed: Inappropriate ioctl for deviceDie anderen TCP/IP Server, welche STDIO nicht umbiegen, starten soweit ich das erkennen ohne Probleme.
Also wie startet man ein Programm, welches auf eine serielle Schnittstelle zugreift als Hintergrundprogramm ?
Ich bin nicht so der Scriptfreak. Mir fehlt aber auch leider das Stichwort, wo ich mir die ganze Sache anlesen kann. Das ganze soll auch nicht während des Booten gestartet werden, sondern später einfach vom Desktop ?
Oder muss ich das Programm selber ändern und einen neuen Prozess anlegen ?
Gruss
-
Müsste Zeile 5 nicht eher so aussehen?
./erf 2 >> PD/abmeserf &
-
Hi,
danke für den Tip.
Die Fehlermeldung blieb trotzdem die gleiche.Ein paar Stunden im Internet lesen und ein weiterer Blick in den
Quellcode haben den Fehler gezeigt. Er lag in der Init-Routine des
RS232 .Hier die auslösende Info "That's ENOTTY. "
http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2005-03/0099.html/* change standard input */ if (tcgetattr(fd, &term_attr) != 0) { perror("terminal: changed tcgetattr() failed"); return(1); } if (tcsetattr(fd, TCSAFLUSH, &term_attr) != 0) perror("terminal: tcsetattr() failed");
Anstelle des neuen fd stand hier noch STDIN_FILENO.
Typisch für cat copy paste fehlerGruss