PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : chmod mit anschließendem rm geht nicht...



Mat
26-10-2005, 19:38
#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?

locus vivendi
26-10-2005, 19:48
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.

rgubatz
27-10-2005, 10:32
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:


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

Joghurt
27-10-2005, 10:49
Das ganze ist aber wie schon erwähnt völlig unnötig, nutz einfach die Funktionen der C-Library dafür.

#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);
}
}