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.

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?

0

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

system("/bin/bash -c \"ls -al\"");
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.

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

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ć.

        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));
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ć.

        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

1 użytkowników online, w tym zalogowanych: 0, gości: 1