Programm kopieren



  • Guten Abend,

    ich habe mich entschieden C zu lernen und bin jetzt auch schon ein paar Tage beschäftigt. Ich habe heute damit angefangen etwas mit C rumzuspielen und habe versucht mein Programm in den selben Ordner zu kopieren.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <malloc/malloc.h>
    
    char *mergeChars();
    int makeCopy();
    
    int main(int argc, char *argv[]){
        char *source = argv[0];
        char *target = mergeChars(source, "1");
    
        makeCopy(target, source);
        printf("Ort: %s \n", source);
        printf("neuer Ort: %s \n", target);
        printf("MAX Puffer: %d \n", BUFSIZ);
        return EXIT_SUCCESS;
    }
    
    char *mergeChars(char *first, char *second){
        char *fir, *sec, *ret;
        fir = strdup(first);
        sec = strdup(second);
        fir = realloc(fir, sizeof(fir) + strlen(sec));
        ret = strcat(fir, sec);
        return ret;
    }
    
    int makeCopy(char *source, char *destination){
        FILE *sourceFile;
        FILE *destinationFile;
        static char bufferSource[BUFSIZ];
        static char bufferDestination[BUFSIZ];
    
        sourceFile = fopen(source, "r");
        if(NULL == sourceFile){
            perror(NULL);
            return EXIT_FAILURE;
        }else{
            destinationFile = fopen(destination, "w");
            if(NULL == destinationFile){
                perror(NULL);
                return EXIT_FAILURE;
            }else{
                int i;
                setbuf(sourceFile, bufferSource);
                setbuf(destinationFile, bufferDestination);
                while((i = fgetc(sourceFile)) != EOF){
                    fputc(i, destinationFile);
                }
                fclose(destinationFile);
                fclose(sourceFile);
                return EXIT_SUCCESS;
            }
        }
    }
    

    Funktioniert eigentlich auch soweit. Das Programm erstellt mir eine neue Datei mit neuen Namen aber leider ist es mir nicht möglich diese Kopie auszuführen.
    Woran liegt es das eine vermeindlich exakte Kopie nicht mehr ausführbar ist und wie kann ich es bewerkstelligen das mein Programm 1:1 kopiert wird?

    Ich benutze OSX Mavericks und den gcc compiler falls das relevant ist.

    mfg Impi_



  • Wahrscheinlich musst du nur das Execute-Bit setzen. man 2 chmod bzw fchmod.



  • Öffne die Dateien mal im Binary-Mode "rw" und "wb"

    strdup ist keine Standardfunktion.
    Du hinterlässt ein Speicherleck. Der Speicher von fir und sec wird nicht frei gegeben.

    In Zeile 43 ist source noch geöffnet.
    Den Bufferspeicher solltest du mit malloc besorgen und dann auch wieder frei geben.



  • ENAMETOOLONG das mit chmod hat super funktioniert danke.


Anmelden zum Antworten