(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 device

    Die 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 fehler 😉

    Gruss


Anmelden zum Antworten