Hallo Horst,
cp konsultiert das Filesystem (FS), schaut nach den der zu kopierenden Datei physischen Cluster, fragt das FS nach neuen freien Clustern und kopiert bitweise in die neuen Cluster. Anschließend informiert cp das FS über die neu geschriebene Datei am Cluster xy...
cp liest die Datei zeichenweise ein und schreibt zeichenweise eine neue Datei über high-level-Funktionen wie fopen() und fclose().
Tja, wie nun ?
Auch wenn bereits Code gepostet wurde, weder noch.
1. Normalerweise nicht, weil das zu systemnah wäre. Man baut lieber auf FileOpen()-betriebssystem-Funktionen und ähnlichem auf, als für jedes mögliche Dateisystem nach freien Clustern zu suchen. Zudem sind unpriviligierte Benutzer (und deren Programme) meist sowieso nicht in der Lage, direkt im Dateisytsem runzuschreiben.
2. triffts schon eher, allerdings kopiert man aus Performancegründen auf keinen Fall zeichenweise, sondern Blockweise. Ein Block ist dabei, um auch nicht zuviel RAM zu verbrauchen, z.B. so groß wie ein Kilobyte oder ein Cluster des Dateisystems (512Byte aufwärts). Kommt nicht wirklich drauf an, weil sowieso sehr viel gecached wird, nur die Größenordnung sollte stimmen. Bei zu kleinen Blockgrößen, verursacht halt die Schleife zuviel Verwaltungsoverhead, denn dann muss ja z.B. für jedes Byte auch noch der Schleifenzähler um eins erhöht werden und dann eben auch noch verglichen werden, ob man am Dateiende ist.
Alles in einem Block kopieren geht selbstverständlich auch nicht, sonst wäre bei einer großen Datei der RAM sehr schnell voll.
Jonathan