E
Hallo ich versuche gerade unter Unix einen Dateikopierer zu bauen.
Weiß jemand wie ich einen Symlink kopiere?
Normale Dateien lassen sich kopieren.
So sieht mein Programm bis jetzt aus:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
int copyPipe(char* data, char* target){
}
int copyData(char* data, char* target){
int in, out, count;
char buffer[512], name[512];
//buffer leeren
memset(buffer,0,sizeof(buffer));
//String kopieren und quelle anhaengen
strcpy(name,target);
strcat(name,data);
//Quelldatei oeffnen
if((in = open(data, O_RDONLY))==-1){
printf("Fehler beim oeffnen der Zieldatei\n");
return EXIT_FAILURE;
}
//Zieldatei oeffnen / anlegen
if((out=open(name,O_RDWR|O_CREAT|O_TRUNC,S_IRWXU)) == -1) {
printf("fehler beim oeffnen/anlegen der Zieldatei\n");
return EXIT_FAILURE;
}
//inhalt der Quelldatei einlesen
while(count = read(in, buffer, sizeof(buffer))){
//Zieldatei beschreiben
if((write(out, buffer, sizeof(buffer))) == -1) {
printf("Fehler bei write\n");
return EXIT_FAILURE;
}
}
//Dateien schliessen
close(in);
close(out);
return EXIT_SUCCESS;
}
int main(int argc, const char *argv[]){
struct stat stat_buf;
int i;
//mit jedem Schleifendurchlauf wird eine Datei kopiert
for(i=1;i<argc-1;i++){
if ( lstat(argv[i], &stat_buf) == -1){
fprintf(stderr, "Datei nicht vorhanden\n");
}
//Datei
else if ( S_ISREG(stat_buf.st_mode) ){
copyData(argv[i], argv[argc-1]);
}
//Link
else if ( S_ISLNK(stat_buf.st_mode) ){
copyData(argv[i], argv[argc-1]);
}
//Pipe
else if ( S_ISFIFO(stat_buf.st_mode) ){
copyPipe(argv[i], argv[argc-1]);
}
else{
fprintf(stderr, "Daten nicht kompatibel\n");
}
}
return 0;
}