Archiv verlassen und diese Seite im Standarddesign anzeigen : chmod mit anschließendem rm geht nicht...
#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.
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
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);
}
}
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.