Anzeige:
Ergebnis 1 bis 4 von 4

Thema: chmod mit anschließendem rm geht nicht...

  1. #1
    Registrierter Benutzer
    Registriert seit
    24.08.2004
    Beiträge
    749

    chmod mit anschließendem rm geht nicht...

    Code:
     #include <stdio.h> 
     #include <unistd.h> 
     
     int main(int argc, char *argv[]) 
      { 
             char *ch_argv[] = {"/bin/chmod","-v","777","file.txt",0}; 
             char *rm_argv[] = {"/bin/rm","-f","file.txt",0}; 
             execv("/bin/chmod",ch_argv); 
             execv("/bin/rm",rm_argv) ; 
             return 0; 
      }

    dann geht das removen nur wenn ich vorher die Zeile mit dem rechtesetzen auskommentiere ?

    Warum kann ich nicht löschen nachdem ich die Rechte gestzt habe?

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Du hast höchstwahrscheinlich eine völlig verkehrte Vorstellung davon, was "execv" macht. Siehe am besten in einer Referenz nach, was das ist. Plus, wenn du das gemacht hast, dann würde ich vorschlagen nicht die Programme chmod und rm aufzurufen, sondern entsprechende Bibliotheksfunktionen.

  3. #3
    Registrierter Benutzer
    Registriert seit
    18.11.2004
    Beiträge
    23
    Hallo Mat,
    The exec family of functions replace the current process image with a new
    , sagt uns, dass unser aktueller Prozess mit einem neuen Prozess überlagert wird. Da in unseren neuen Prozess (chmod) ein exit(0); ausgeführt wird, beendet sich unser Programm. Hier mal ein Beispiel wie man exec* einsetzen kann:
    Code:
    if ((pid = fork()) < 0) {
       MSG_WARNING("ERROR: fork(): %s, terminating!", strerror(errno));
       alertflag |= AF_RUN_ERROR;
       goto end;
       /* parent process */
    } else if (pid > 0) {
       waitpid(pid, NULL, 0);
       /* child process */
    } else {
       execl("/bin/sh", "sh", "-c", script_path, 0);
    }
    Gruss Rene

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Das ganze ist aber wie schon erwähnt völlig unnötig, nutz einfach die Funktionen der C-Library dafür.
    Code:
    #include <unistd.h> // unlink
    #include <stdio.h> // perror
    #include <sys/types.h>
    #include <sys/stat.h> // beide chmod
    
    int main()
    {
       if (chmod("file.txt", 0777) != 0) {
          perror("chmod failed");
          exit(1);
       }
    
       if (unlink("file.txt") != 0) {
          perror("Unlink failed");
          exit(1);
       }
    }

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •