Problem z funkcją system

Problem z funkcją system
0

Hej
Mam problem z funkcją system().
Uruchamiam apke na linuxie embedded i w apce w kodzie jak wywołuję system("ls -al") czy system("cp path1 path2") to nie działa.
Nawet jak podam ścieżki bezwzględne czyli "/bin/ls" to też nie działa. Nie działa czyli funkcja system zwraca kod błędu "1206168340 - No such file or directory"
Działa mi natomiast jak skompiluje na x86 i uruchomię na ubuntu. Na linuxie embedded wiadomo nie ma graficznego API. Ten linux embedded to angstrom.
Z moich inwestygacji wynika, że funkcja system(NULL) nie zwraca 0 czyli można jej używać.
Ponadto sama apka ma GID, UID roota.
Ponadto jak w shellu wklepię "ls -al" to działa. Więc nie rozumiem czemu nie działa mi system("ls -al"). Dla mnie to jest rocket science.

WhiteLightning
z ciekawosci wywolaj pwd
0
0

Nawet jak podam ścieżki bezwzględne czyli "/bin/ls" to też nie działa. Nie działa czyli funkcja system zwraca kod błędu "1206168340 - No such file or directory"

To jakis kosmiczny numer bledu ten 1206168340. Gdyby to bylo No such file or directory - powinienes dostac blad nr 2. Skad ten pomysl ze ta wartosc to no such file or directory?

MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:minuta
0

czy przypadkiem ls nie jest komendą wbudowaną w bash-a?
Ergo by ją odpalić za pomocą system trzeba zrobić tak:

Kopiuj
system("/bin/bash -c \"ls -al\"");

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
AL
Różnie to bywa. Zrób which ls. A potem ls /bin/ls. Zgaduję, że oba zadziałają, to drugie dla kompatybilności wstecz. :)
0
Kwadratowy pomidor napisał(a):

Nawet jak podam ścieżki bezwzględne czyli "/bin/ls" to też nie działa. Nie działa czyli funkcja system zwraca kod błędu "1206168340 - No such file or directory"

To jakis kosmiczny numer bledu ten 1206168340. Gdyby to bylo No such file or directory - powinienes dostac blad nr 2. Skad ten pomysl ze ta wartosc to no such file or directory?

strerror(errno) mi zwraca no such file or directory jak sobie printuję a ta kosmiczna liczba to wartość zwracana z funkcji system, którą też printuję. OK to może to errno tyczy się czegoś wcześniejszego. W każdym razie spróbuję jutro sposobu MarkaR22. Aczkolwiek na ubuntu apka mająca w kodzie system("ls -al") przechodziła, no ale spróbuję ten sposób.

edytowany 1x, ostatnio: flowCRANE
0

Niestety dalej ten sam kod błędu, a errno to rzeczywiście tyczy się czegoś innego bo sprawdziłem co wypluwa przed użyciem system.

0

WEXITSTATUS z watrtości return z funkcji system zwraca za każdym razem 171.

0

Pokaż kod człowieku frasobliwy... mam kryształową kulę w warsztacie na przeglądzie okresowym

edytowany 1x, ostatnio: flowCRANE
0

Kod jest tak prosty że nawet nie ma co pokazywać, tu raczej chodzi generalnie czemu system() może nie działac na jednym linuksie a na drugim działać.

Kopiuj
        int code2 = system("/bin/sh -c \"/bin/ps > /ram/psi\"");
        printf("(1) %d, exit status = %d", code2, WEXITSTATUS(code2));

        int code3 = system("/bin/sh -c \"/bin/ls -al\"");
        printf("(2) %d, exit status = %d", code3, WEXITSTATUS(code3));

        int code4 = system("echo $?");
        printf("(3) %d, exit status = %d", code4, WEXITSTATUS(code4));
edytowany 1x, ostatnio: flowCRANE
0

coś czuje że bez forka i execl sie nie obejdzie

0
tomekTomek napisał(a):

Kod jest tak prosty że nawet nie ma co pokazywać, tu raczej chodzi generalnie czemu system() może nie działac na jednym linuksie a na drugim działać.

Kopiuj
        int code2 = system("/bin/sh -c \"/bin/ps > /ram/psi\"");
        printf("(1) %d, exit status = %d", code2, WEXITSTATUS(code2));

        int code3 = system("/bin/sh -c \"/bin/ls -al\"");
        printf("(2) %d, exit status = %d", code3, WEXITSTATUS(code3));

        int code4 = system("echo $?");
        printf("(3) %d, exit status = %d", code4, WEXITSTATUS(code4));

system() nie działa na linuksie, tylko na poziomie libc

edytowany 1x, ostatnio: flowCRANE

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.