No, právě jsem vyzkoušel váš program a mám představu, co se děje.
V podstatě to funguje, ale s chybou. Když do souboru poprvé zapíšete "thy fall", použijete char
pole 4096
bajtů a zapíšete celé pole do souboru. Což znamená, že píšete "thy fall" následované 4088
postavy náhodného nic. Později, když přidáte, přidáváte na 4097. pozici dále. Pravděpodobně to není to, co jste chtěli udělat.
Pokud jednoduše cat
soubor, který vytvoříte, uvidíte očekávaný výstup "thy fall, vole". Ale když si to přečtete celý ve svém kódu, čtete pouze 4096
znaky. Část ", vole" se tedy nikdy nepřečte, a proto ji váš program nikdy nevypíše.
Moje řešení, musíte změnit velikost pole. A při čtení čtěte po kouscích řekněme 100 nebo 1000, dokud nestisknete EOF (read
vrátí -1).
Počet bajtů, které se pokoušíte zapsat, není správný
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){
místo toho byste to měli udělat
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l', '\0'};
size_t n = strlen(buf); //use strlen
if(write (fd, buf, n) < 0){
Podobně to udělejte pro další zápis a čtení. Pokud nepíšete '\0'
v souboru pro ukončení řetězce, nedostanete jej při čtení dat ze souboru.
Při čtení byste měli zkoušet, dokud není načten celý soubor, tzn. získáte EOF
.
Je tu jen malá chyba, musíte změnit sizeof
funkce na strlen
protože sizeof
funkce vrátí velikost pole, ale strlen
funkce pouze vrátí délku řetězce uloženého v poli!