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.

Użyj exec
https://linux.die.net/man/3/exec
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?

- Rejestracja:około 17 lat
- Ostatnio:3 minuty
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.
Pokaż kod człowieku frasobliwy... mam kryształową kulę w warsztacie na przeglądzie okresowym
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));
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