Systembefehl ausführen

Letztes Update 2020/10/20 22:43

Hier wird erklärt, wie aus einem laufenden Programm heraus ein weiteres aufgerufen werden kann. An den GPIO-Port 19, WiringPi24, wird ein Lüfter angeschlossen. Zur Steuerung des Lüfters wird ein Programm erstellt, mit dem der Lüfter ein- und ausgeschaltet werden kann. Dieses Programm soll von einem anderen Programm aufgerufen, und damit der Lüfter eingeschaltet werden.

Zuerst wird ein Programm zum ein-und ausschalten des Lüfters erstellt. Dazu den Editor Nano aufrufen:

nano cfan.c

Hier geben wir folgendes ein:

/*###################################################
#    Name: cfan.c
# Version: 1.00
#   Datum: 20.10.2020
#   Zweck: Lüfter am WPi Port 24 ein- und ausschalten
# (CC) BY-SA
#####################################################*/
 
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
 
int main (int argc, char **argv){
#define FAN     24      //wiringpi port des lüfters
#define HIGH    1
#define LOW     0
int wert;
 
if(argc < 2) {
        printf("\n -- FEHLER ----------------------");
        printf("\n Keinen Parameter angegeben!");
        printf("\n Aufruf: ./cfan 1 zum einschalten");
        printf("\n         ./cfan 0 zum ausschalten");
        printf("\n --------------------------------\n\n");
        return EXIT_FAILURE;
        }
 
        wert = atoi( argv[argc-1]);     //string in integer umwandeln
 
        wiringPiSetup ();
        pinMode (24, OUTPUT);
 
        if  (wert == 1) {
                digitalWrite (FAN, HIGH);
        } else {
                digitalWrite (FAN, LOW);
        }
 
        return EXIT_SUCCESS;
}

mit Strg+o den Text speichern und mit Strg+x den Editor verlassen.

Das Programm Compilieren

 gcc -o  cfan cfan.c  -lwiringPi

Nun kann durch die Eingabe von ./cfan 1 der Lüfter ein- und durch die Eingabe von ./cfan 0 wieder ausgeschaltet werden.

Da es aber vorkommen kann, dass ein Programm auch aus anderen Programmen gesteuert werden soll, wird als Beispiel ein weiteres Programm erstellt, welches mit einen Systemaufruf das Programm cfan aufruft.

Dazu wird mit dem Editor Nano ein neues Script erstellt:

sudo nano ein.c

Hier geben wir folgendes ein:

/*###############################################
#    Name: ein.c
# Version: 1.00
#   Datum: 20.10.2020
#   Zweck: Demo zum Ausführen eines shell-Befehls
# (CC) BY-SA
#################################################*/
 
#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
  char * command = "./cfan 1";
 
  int ret = system( command );
 
// Zur Kontrolle der Funktion
//  if( ret == -1 )
//    printf( "Der Programmteil cfan wurde nicht gefunden.\n");
//  else
//    printf( "Programm ohne Fehler durchgelaufen\n" );
 
  return EXIT_SUCCESS;
}

Wieder mit Strg+o den Text speichern und mit Strg+x den Editor verlassen und Compilieren:

gcc -o ein ein.c

Wenn nun an der Konsole ./ein eingegeben wird, dann wird über den Command Befehl das Programm cfan mit dem Parameter 1 aufgerufen und dadurch der Lüfter eingeschaltet. Zur Kontrolle können die auskommentierten Zeilen aktiviert werden. Falls im Betrieb das aufzurufende Programmm nicht im selben Verzeichnis liegt, muss der Pfad angegeben werden.

Die neuen Funktionen im Listing

system()
system() ist in der <stdlib.h> definiert und führt einen Shell-Befehl aus. Weitere Info auf proggen.org