GNU/Linux >> Znalost Linux >  >> Linux

Jak připojit k souboru v C pomocí Otevřít v režimu O_APPEND na linuxu?

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!


Linux
  1. Jak snadno přidat text na konec souboru v Linuxu

  2. Jak napsat soubor s C v Linuxu?

  3. Jak otevřít - přerušovaný název souboru pomocí terminálu?

  1. Jak přidat text na konec souboru v Linuxu

  2. Jak obnovit otevřený, ale smazaný soubor v Linuxu pomocí ln místo cp?

  3. Jak otevřít soubor ve vim pomocí pipe

  1. Práce se soubory v Pythonu:Vytvořit, Otevřít, Připojit, Číst, Zapisovat

  2. Jak napsat text na obrázek pomocí příkazu Linux

  3. Jak rozdělit iso nebo soubor pomocí příkazu „split“ v Linuxu