Nowe posty

Autor Wątek: Skrypt Bash do C  (Przeczytany 2048 razy)

pimowo

  • Gość
Skrypt Bash do C
« dnia: 2015-03-30, 10:25:26 »
Witam,
Czy znajdzie się dobra dusza i "przepisze" mi skrypt Bash do C? :)
#!/bin/bash
 
case "$1" in
    off)
        [ $2 = "1" ] && echo -ne "S0110\\r" > /dev/ttyUSB0
        [ $2 = "2" ] && echo -ne "S0120\\r" > /dev/ttyUSB0
        [ $2 = "3" ] && echo -ne "S0130\\r" > /dev/ttyUSB0
        [ $2 = "4" ] && echo -ne "S0140\\r" > /dev/ttyUSB0
        [ $2 = "5" ] && echo -ne "S0150\\r" > /dev/ttyUSB0
        [ $2 = "6" ] && echo -ne "S0160\\r" > /dev/ttyUSB0
        ;;
     on)
        [ $2 = "1" ] && echo -ne "S0111\\r" > /dev/ttyUSB0
        [ $2 = "2" ] && echo -ne "S0121\\r" > /dev/ttyUSB0
        [ $2 = "3" ] && echo -ne "S0131\\r" > /dev/ttyUSB0
        [ $2 = "4" ] && echo -ne "S0141\\r" > /dev/ttyUSB0
        [ $2 = "5" ] && echo -ne "S0151\\r" > /dev/ttyUSB0
        [ $2 = "6" ] && echo -ne "S0161\\r" > /dev/ttyUSB0
 
        ;;
 status)
        [ $2 = "1" ] && echo -ne "S0112\\r" > /dev/ttyUSB0 && grep -m1 "" /dev/ttyUSB0
        [ $2 = "2" ] && echo -ne "S0122\\r" > /dev/ttyUSB0 && grep -m1 "" /dev/ttyUSB0
        [ $2 = "3" ] && echo -ne "S0132\\r" > /dev/ttyUSB0 && grep -m1 "" /dev/ttyUSB0
        [ $2 = "4" ] && echo -ne "S0142\\r" > /dev/ttyUSB0 && grep -m1 "" /dev/ttyUSB0
        [ $2 = "5" ] && echo -ne "S0152\\r" > /dev/ttyUSB0 && grep -m1 "" /dev/ttyUSB0
        [ $2 = "6" ] && echo -ne "S0162\\r" > /dev/ttyUSB0 && grep -m1 "" /dev/ttyUSB0
        ;;
 
   esac
 
 exit 0
Skryptem steruje przekaźniki na karcie podłączonej do Raspberry Pi (system Raspbian) poprzez RS485
włącz:
skrypt.sh on 1
wyłącz:
skrypt.sh off 1
stan:
skrypt.sh status 1
Z góry dziękuje.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Skrypt Bash do C
« Odpowiedź #1 dnia: 2015-03-30, 20:13:08 »
Właściwie po co chcesz przepisać taki prosty skrypt z przenośnego Basha do wymagającego kompilacji C?

Przydadzą się:
int main(int argc, char **argv)
{
  ...
}
if (strcmp(argv[1], "off") == 0)
{
  ...
}

if (strcmp(argv[2], "6") == 0)
{
  ...
}

// lub lepiej:

int onoff = (strcmp(argv[1], "on") == 0) ? 1 : 0;
char string[1000];
sprintf(string, "S01%s%d", argv[2], onoff);
printf("%s\\n", string); // test
#include 

FILE *f = fopen("/dev/ttyUSB0", "w");
fputs("S0110\\r", f);
fclose(f);

FILE *f = fopen("/dev/ttyUSB0", "r");
char line[10000];
getline(&line, sizeof(line), f);
fclose(f);
Najlepiej byłoby to ładnie opakować w funkcje, żeby nie duplikować kodu.
To właściwie powinno wystarczyć, żeby posklejać ten kod.

Źródła:
http://pl.wikibooks.org/wiki/C/fopen
http://pl.wikibooks.org/wiki/C/fputs
http://man7.org/linux/man-pages/man3/getline.3.html

grep -m1 ""
Po co właściwie jest powyższy zapis? Chodzi o wyświetlenie tylko jednej linii?

pimowo

  • Gość
Skrypt Bash do C
« Odpowiedź #2 dnia: 2015-03-30, 23:18:10 »
Dziękuje za odpowiedź w temacie.
Cytat: ultr
Właściwie po co chcesz przepisać taki prosty skrypt z przenośnego Basha do wymagającego kompilacji C?
Tak sobie pomyślałem, że w C będzie to lepiej działać ;)
Cytat: ultr
grep -m1 ""
Po co właściwie jest powyższy zapis? Chodzi o wyświetlenie tylko jednej linii?
Gdy sprawdzam status to karta odpowiada jaki mam stan przekaźników.

To może inaczej zapytam. Czy przejście z Bash na C coś zmieni w szybkości działania skryptu? A może lepiej dopracować ten skrypt w Bash, a C sobie odpuścić?