L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    möchte in einem C Code auf ein Programm zugreifen jedoch gibt mir die Console folgenden Fehler aus:

    Code
    Fehler execve(): Permission denied

    Habe versucht mit

    Code
    name ALL = (ALL) NOPASSWD: ALL

    das Passwort zu deaktivieren, habe versucht den c code mit sudo aufzurufen, habe versucht dem C Code
    sudo programm als Parameter zu übergeben, aber nichts funktioniert. Die Meldung kommt immer wieder.
    sudo execve() funktioniert auch nicht.

    Was kann man noch tun?

    Einmal editiert, zuletzt von Cool_pi (11. September 2014 um 14:49)

  • Hallo Cool_pi,

    tust Du so:

    Code
    system("sudo befehl argumente")

    oder, wenn Du nicht so gern mit system arbeitest, dann mit execve oder ...

    Gutes Gelingen!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. September 2014 um 15:14)


  • Hallo Cool_pi,

    tust Du so:

    Code
    system("sudo befehl argumente")

    oder, wenn Du nicht so gern mit system arbeitest, dann mit execve oder ...

    Gutes Gelingen!

    Andreas


    Ja, system() passt in meinem Fall nicht.

    Mit visuso sudo habe ich das Passwort deaktiviert.

    Einmal editiert, zuletzt von Cool_pi (11. September 2014 um 16:00)

  • Hallo Cool_pi,

    kannst Du uns mal vielleicht verraten, was Du überhaupt vorhast?

    Vielleicht gibt es da noch einen ganz anderen Weg - denn wenn system() nicht eingesetzt werden soll, und Dir das System meldet, dass Du die Rechte nicht hast, Du aber auch nicht mit sudo arbeiten willst / kannst, dann sind mehr Details erforderlich - mir zumindest.


    Beste Grüsse

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo, Andreas.

    möchte ein Abspielprogramm auf dem RasPi über eine Tastatureingabe zu bedienen.

    So starte ich das.

    Code
    char * omxplayer = "/usr/lib";
    char * argv[] = {"/usr/lib", "omxplayer", NULL};
    char * envp[] = {NULL};
    int back;
    back = execve(omxplayer, argv, envp);

    "/usr/lib" ist der Pfad zum Omxplayer. Auf diesen Ordner kann wohl nur der root zugreifen

    Einmal editiert, zuletzt von Cool_pi (11. September 2014 um 17:09)


  • ...

    Code
    char * omxplayer = "/usr/lib";
    char * argv[] = {"/usr/lib", "omxplayer", NULL};
    char * envp[] = {NULL};
    int back;
    back = execve(omxplayer, argv, envp);


    Nope ... so wird das nix ;) ...

    Code
    char *argv[] = { "/usr/lib/omxplayer" ,NULL };
    char *envp[] = {NULL};
    execve(argv[0], argv, envp);

    back kannst Du Dir sparen ... exec kehrt nicht zurück ;) ...

    cu,
    -ds-

  • *Hände auf Kopf leg und komisch guck* ... what the hell :huh:


    Also zunächst mal, bitte die Überschrift im ersten Beitrag anpassen und dem Thema entsprechend genauer beschreiben worums hier geht.

    Als nächstes beschreibst du bitte was genau du vor hast, welcher Benutzer das ausführen soll und postest den genauen /etc/sudoers Eintrag.


    Lies dir für execve(); mal die manpages durch: http://man7.org/linux/man-pages/man2/execve.2.html

    Das erste Argument was man an execve übergibt muss den vollständigen Pfad zum Programm beinhaltet, inkl. dem Programm. Also nicht nur der Pfad selber sondern auch das Programm: /usr/lib/omxplayer
    Ich bezweifel allerdings das die Binary von omxplayer in /usr/lib/ liegt ... normalerweise liegt die in /usr/bin/

    Das zweite Argument was man an execve übergibt sind mögliche Argumente für den auszuführenden Befehl. In deinem Fall anscheint gar keine :huh: Fragt sich allerdings nur was omxplayer dann abspielen soll?!? Leerzeichen in den Argumenten sind übrigens nicht erlaubt.

  • Ok, der Pfad hat nicht gestimmt.
    /usr/bin ist der korrekte Speicherort für den Omxplayer.
    Abgespielt wird nichts, weil nocht Angaben zur Abspieldateien gemacht wurden.

    Wenn man mehrere Sachen abspielen möchte, kann man den diese Zeile

    Code
    char *argv[] = { "/usr/bin/omxplayer" ,NULL };


    ungefähr so umschreiben?

    Code
    char *argv[]={"/usr/bin/omxplayer", "video1.mp4","video2.mp4", NULL}


    Mit einer Datei funktioniert jedenfalls.

    Einmal editiert, zuletzt von Cool_pi (11. September 2014 um 19:03)

  • So ist das wohl ... ;) ...
    ciao Du alter C-Fummler ...
    //EDIT:
    Also mit den argumenten, das ist schon korrekt, aber ich hab jetzt nebenbei mal nachgeschaut: der omxplayer akzeptiert nur eine einzige Datei als Argument ... auch eine Playliste wird nicht unterstützt.
    Da wirst Du Dir was einfallen lassen müssen, um mehrere Dateien abspielen zu können ...
    So, ... nu aber ...
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!