Odnośnie zadania drugiego:
Sprawdźmy najpierw w dokumentacji te funkcje, które są wymienione w poleceniu.
read() oczekuje jako parametry dostać wskaźnik na miejsce, gdzie ma zapisać znaki oraz liczbę określającą ile tych znaków wyjąć - tutaj podamy ten mądrze brzmiący "bufor".
write() - oczekuje takiego samego zestawu argumentów.
Stwórzmy więc taki bufor. Wiemy, że ma to być trzyznakowy bufor. Wiemy (z dokumentacji), że zarówno read() jak i write() chcą mieć bufor typu char*. Zatem za bufor może posłużyć zwykła statyczna tablica trzyelementowa typu char:
char bufor[3];
Zakładam, że posiadasz dwa poprawnie otwarte strumienie do plików, jeden do odczytu pliku "3.txt", drugi do zapisu do "bufor.txt".
Wykorzystanie bufora do przerzucenia z jednego pliku do drugiego, będzie wyglądało tak:
file_3_txt.read(bufor, 3); // spróbuj wyjąć ze strumienia 3 znaki i umieścić w buforze
file_bufor_txt.write(bufor, 3); // wpisz 3 znaki z bufora do strumienia... tylko pytanie: czy zawsze będą to trzy znaki?
Musisz też pamiętać, że po każdych trzech znakach przeniesionych z jednego pliku do drugiego, autor polecenia chciał mieć umieszczony znak nowej linii w pliku "bufor.txt", co można zrobić np. tak:
file_bufor_txt.put('\n');
Pokazałem Ci, w jaki sposób przenieść jedną "partię" danych. Do Ciebie należy połączenie tego w działający program, który zadba o to, żeby przenieść wszystkie dane. Żeby dowiedzieć się, czy wszystkie dane zostały wyjęte ze strumienia, przydatna może być funkcja gcount.
Jeśli będziesz miał z tym problemy, pisz. :)