ANSI C I/O Write/Read

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ANSI C I/O Write/Read

    Hallo,

    ich hab ne Aufgabe wo ich eine beliebige Datei byteweise kopieren soll.

    Nun, Textdateien klappen super. Egal ob die Datei ein Sektor belegt oder mehrere. Wenn ich nun allerdings n Pdf mit einer größe von 28KB (die txt war 5KB) kopieren will hört er nach einem Lesen und Schreiben auf.

    Quellcode

    1. #define MAXBYTES 1024
    2. int main(int argc, char **argv) {
    3. if(argc < 3) {
    4. (void) printf("usage of mybcp: mybcp [file to read] [file to write]");
    5. return EXIT_SUCCESS;
    6. }
    7. /* create a buffer variable */
    8. int *buffer = malloc(MAXBYTES);
    9. int readBytes = 1;
    10. int writtenBytes = 0;
    11. /* get the two file args */
    12. const char *readFile = *(argv + 1);
    13. const char *writeFile = *(argv + 2);
    14. /* open both files, create write file if it doesn't exists, set permissions */
    15. int openReadFile;
    16. if((openReadFile = open(readFile, O_RDONLY)) == -1) {
    17. (void) printf("error at opening reading file!");
    18. return EXIT_FAILURE;
    19. }
    20. int openWriteFile;
    21. if((openWriteFile = open(writeFile, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR)) == -1) {
    22. (void) printf("error at opening writing file!");
    23. return EXIT_FAILURE;
    24. }
    25. /* read and write until read bytes are less or equal 0 */
    26. while((readBytes = read(openReadFile, buffer, MAXBYTES)) > 0) {
    27. writtenBytes = write(openWriteFile, buffer, readBytes);
    28. (void) printf("Anzahl Bytes gelesen: %d, Anzahl Bytes geschrieben: %d\n", readBytes, writtenBytes);
    29. }
    30. /* close file descriptor */
    31. close(openReadFile);
    32. close(openWriteFile);
    33. return EXIT_SUCCESS;
    34. }
    Alles anzeigen


    Versteh ich irgendwie die Funktion von von write und read falsch oder weswegen geht es nur bei Textdateien?
  • Illidan schrieb:

    Danke für die Antworten! Was merkwürdig ist das es unter Linux auf einmal klappte aber unter Windows nicht. (also ohne das o_binary flag)


    Ich zitiere mal eben:
    "In many environments, such as most UNIX-based systems, it makes no difference to open a file as a text file or a binary file; Both are treated exactly the same way, but differentiation is recommended for a better portability."