2011-12-28 15 views
6

Używam polecenia system() w C do wykonywania poleceń, takich jak sc query mysql lub net start mysql.wartość zwracana przez system() w C

Jeśli parametr ma wartość null pointer wówczas zwraca 1 jeśli procesor cmd jest OK, w przeciwnym wypadku zwraca 0. W przypadku pomyślnego wykonania polecenia zwraca 0.

Moje pytanie brzmi: Czy mogę otrzymać listę jego powrotu wartości? Jak to, co zwróci, jeśli polecenie jest nieważne lub jaka będzie wartość zwracana przy nieudanym wykonaniu? Chcę robić różne rzeczy w zależności od zwracanej wartości system().

+1

Możliwe duplikat [kodu powrotu układu()] (https://stackoverflow.com/questions/6904592/return-code-of-system) – CDahn

Odpowiedz

8

Jako system stanowy() zwraca -1, jeśli utworzenie nowego procesu wykonania polecenia zakończy się niepowodzeniem, w przeciwnym razie zwraca kod zakończenia wykonanego polecenia. jest to ta sama wartość, którą można odzyskać przy użyciu echo $? w systemie Unix lub echo %ERRORLEVEL% w oknach po wykonaniu tego samego polecenia w powłoce. Tak więc, jeśli chcesz obsłużyć wartości zwracane, musisz sprawdzić, jakie polecenia zostaną wykonane.

2

system() zwraca kod zakończenia procesu, który uruchomiłeś.

Kody wyjścia mają zwykle tylko konwencję, że kod wyjścia 0 oznacza sukces, a niezerowy oznacza błąd. Dla rzeczywistego znaczenia różnych kodów wyjścia, są one specyficzne dla każdego programu, a następnie dla kaprysu programisty. Będziesz musiał przejrzeć dokumentację konkretnego programu, którego używasz (chociaż częściej niż nie, nie jest to udokumentowane, musisz przeczytać kod źródłowy)

11

Wszystko, co musisz zrobić, to man system wiedzieć więcej na temat systemu system()

OPIS() wykonuje polecenie określonego w poleceniu wywołując/bin/sh -c polecenie i powraca po komendzie został zakończone. Podczas wykonywania polecenia SIGCHLD zostanie zablokowany, , a SIGINT i SIGQUIT zostaną zignorowane.

WARTOŚĆ ZWRACANA Zwrócona wartość to -1 w przypadku błędu (na przykład nie powiodło się fork (2)), a w przeciwnym razie zwracany jest status polecenia. Ten ostatni status powrotu jest w formacie określonym w wait (2). Zatem kod wyjścia polecenia będzie WEXITSTATUS (status). W przypadku, gdy/bin/sh nie zostanie wykonane , stanem wyjścia będzie kod wyjścia, który kończy się (127). Jeśli wartość polecenia ma wartość NULL, funkcja system() zwraca wartość niezerową , jeśli powłoka jest dostępna, a zero, jeśli nie.

+2

include w celu wykorzystania WEXITSTATUS (status) makro .. – bazz

Powiązane problemy