Symlink kopieren mit Kern-Funktionen?
-
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; }