Dlaczego na Linuxie nic nie dziala? execl

Odpowiedz Nowy wątek
Pijany Mleczarz
2016-12-01 21:20
Pijany Mleczarz
0

Jestem nowym uytkownikiem linuxa, uzywam konkretnie raspbiana i raspberry pi. Przerabiam ksiazke linux programowanie systemowe, mamy taki prosty program.

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main()
{   
    int ret;
    ret = execl("/usr/bin", "vim", (char*)NULL);
    if(ret == -1)
    {
        perror("execl");
    }
    return 0;
} 

Program sie uruchamia, ale nie moze otworzyc programu vim, widze tylko w konsoli execl:permission denied . Program vim oczywicie jest w katalogu /usr/bin i jego atrybuty to 777. W takim razie gdzie jest problem?

Na windowsie wszystko bylo prostsze. W linuxe co chwile wychodza jakies haczyki.

Pozostało 580 znaków

2016-12-01 21:32

Rejestracja: 4 lata temu

Ostatnio: 2 lata temu

0

nie jestem pewien, ale tutaj problem może być bardziej "tricky", tzn. problem z permission nie tylko dla ostatniego pliku, ale także dla katalogów WCZEŚNIEJSZYCH.
kiedyś pół dnia siedziałem jak ustawiałem nginx, bo właśnie wyskakiwały problemy z permissions, ale wyszło ostatecznie że dostępy mają być poustawiane od pierwszego katalogu do ostatniego

to jest jedna z takich bardziej ""tricky"" rzeczy, ale nie jestem pewien że na tym polega ten błąd ;)

edytowany 3x, ostatnio: aurel, 2017-10-09 23:11

Pozostało 580 znaków

2016-12-01 21:32

Rejestracja: 8 lat temu

Ostatnio: 2 lata temu

0

Spróbuj użyć funkcji System() zamiast execl().

Pozostało 580 znaków

2016-12-01 22:00

Rejestracja: 16 lat temu

Ostatnio: 28 minut temu

0
Pijany Mleczarz napisał(a):

Na windowsie wszystko bylo prostsze. W linuxe co chwile wychodza jakies haczyki.

Linux nigdy nie miał być alternatywą dla Windowsa. To po prostu otwarta implementacja Unixa ;)

Nawet pasuje rekurencyjny akronim "Linux is not Unix" :P ( https://pl.wikipedia.org/wiki/Linux#Nazwa )

Skoro nie pasuje Ci Linuks, to po prostu zainstaluj Windowsa na tym Raspberry...

Pozostało 580 znaków

2016-12-01 22:01

Rejestracja: 16 lat temu

Ostatnio: 6 godzin temu

1

Pierwszy argument to plik do wykonania.

Drugi i kolejne (aż do NULLa) to parametry przekazane programowi. Pierwszy parametr (argv[0]) powinien być nazwą wykonywanego pliku.

 execl("/usr/bin/vim", "/usr/bin/vim", (char*)NULL);
edytowany 1x, ostatnio: Azarien, 2016-12-01 22:01

Pozostało 580 znaków

Pijany Mleczarz
2016-12-01 22:51
Pijany Mleczarz
0

@Azarien
Ok, dzięki za pomoc, w książce nie zostało to opisane.

Pozostało 580 znaków

2016-12-02 23:33

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

Lokalizacja: Bytom

0

Skoro nie pasuje Ci Linuks, to po prostu zainstaluj Windowsa na tym Raspberry...

Jeśli kolega chce się bawić z RPI to raczej jest skazany na Linuxa, jeśli chce postawić jakiś sensowny program. Windows IOT daje bardzo ograniczone możliwości.

Pozostało 580 znaków

Odpowiedz

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