PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : exec funktion spinnt



mithras
28-12-2002, 00:17
if ( (execle("/home/joe/bla/doc/RCS", "cp", direntz->d_name, songname, NULL, NULL )) == -1){ perror("fehler"); exit(0);}


wenn ich das mittels fork in mein prog einbinde, und dann eben da kopieren will, kommt stets "permession denied" obwohl ich root bin, und es eigentlich keine konflikte bzgl. der zugangsrechte etc. geben dürfte?!

wenn ich das ganze mit execlp und dann:


if ( (execlp("cp", "cp", direntz->d_name, songname, NULL, NULL )) == -1){ perror("fehler"); exit(0);}


gehts, aber das is nicht das was ich brauche, denn dazu muss das programm in dem verzeichnis liegen!

tkortkamp
28-12-2002, 00:47
So sollte es funktionieren.

if((execlp("cp", direntz->d_name, songname, NULL)) == -1){ perror("fehler"); exit(0);}
Das 2. "cp" darf nicht sein (es sein denn es gibt die Datei cp im aktuellen Verzeichnis und du möchtest sie auch kopieren).
Das 2. NULL muss auch nicht sein.



Von pronix.de http://www.pronix.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel2c.shtml#2_ 9 :
execl,execlp,execle

Hier müssen die Kommandozeilenargumente des neu zu startenden
Programms in Form einer Liste übergeben werden. Das Ende der
Argumentliste wird mit einem NULL-Zeiger markiert ...

execlp(programmname,"bla","blabla","blubb",NULL);


c ya,
Tobias

mithras
28-12-2002, 09:43
du hast mich falsch verstanden.




if ((execle("/home/joe/bla/doc/RCS", "cp", direntz->d_name, songname, NULL )) == -1){ perror("fehler"); exit(0);}


ich muss das mit execle machen, da ich ein pfad angeben will (wie ich ja auch eindeutig geschrieben habe!!), und da kommt stets die meldung permession denied, ich denke es hat irgendwie mit dem envireonment zu tun oder so, !?!?

tkortkamp
28-12-2002, 11:46
Original geschrieben von mithras
du hast mich falsch verstanden.




if ((execle("/home/joe/bla/doc/RCS", "cp", direntz->d_name, songname, NULL )) == -1){ perror("fehler"); exit(0);}


ich muss das mit execle machen, da ich ein pfad angeben will (wie ich ja auch eindeutig geschrieben habe!!), und da kommt stets die meldung permession denied, ich denke es hat irgendwie mit dem envireonment zu tun oder so, !?!?
Wo steht das in deinem Post mit dem Pfad?

Und was meinst du damit? Liegen die Dateien in dem Pfad oder das Programm?
Evtl. genügt einfach ein chdir?

mithras
28-12-2002, 14:34
die datein liegen in dem verzeichnis, das programm aber in einem anderen, daher muss ich da ja auch einen pfad angeben.

tkortkamp
28-12-2002, 15:14
Aha.
Dann musst du halt den Pfad vor direntz->name und songname packen. Oder du verzichtest auf exec* und kopierst die Dateien "manuell" mit einer eigenen Funktion.

c ya,
Tobias

mithras
28-12-2002, 15:30
wie meinst du das manuell mit einer eigenen funktion ich will das ja in einem programm automatisieren, aber wäre es event auch mit chdir mögl. ?

tkortkamp
28-12-2002, 15:52
Original geschrieben von mithras
wie meinst du das manuell mit einer eigenen funktion ich will das ja in einem programm automatisieren, aber wäre es event auch mit chdir mögl. ?
Mit manuell mein ich sowas hier:


int copy(const char *source, const char *destination)
{
int c;
FILE *src;
FILE *dest;

if((src = fopen(source, "rb")) == 0 )
{
printf("Fehler: Konnte %s nicht öffnen\n", source);
return -1;
}

/* Warnung: Das Ziel wird, wenn schon vorhanden, überschrieben */
if((dest = fopen(destination, "wb")) == 0)
{
printf("Fehler: Konnte %s nicht öffnen\n", source);
return -1;
}
/* Jedes Zeichen einzeln aus "src" einlesen und in "dest" packen */
while((c = fgetc(src)) != EOF)
{
fputc(c, dest);
}

fclose(src);
fclose(dest);
return 0; /* Erfolgreich */
}


c ya,
Tobias

mithras
29-12-2002, 09:53
naja manuell is es wohl etwas umständlich, ichh ab das jetzt mir chdir hingekriegt..