GNU/Linux >> Tutoriels Linux >  >> Linux

Comment ajouter au fichier en C, en utilisant Open in O_APPEND Mode sous Linux ?

Eh bien, je viens d'essayer votre programme et j'ai une idée de ce qui ne va pas.

Fondamentalement, cela fonctionne, mais avec un pépin. Lorsque vous écrivez pour la première fois "ta chute" dans le fichier, vous utilisez un char tableau de 4096 octets, et vous écrivez le tableau entier dans le fichier. Ce qui signifie que vous écrivez "ta chute" suivi de 4088 caractères de rien au hasard. Plus tard, lorsque vous ajoutez, vous ajoutez à partir de la 4097e position. Ce n'est probablement pas ce que vous aviez l'intention de faire.

Si vous avez simplement cat le fichier que vous créez, vous verrez la sortie attendue "ta chute, mec". Mais lorsque vous le lisez entièrement dans votre code, vous ne lisez que 4096 personnages. Par conséquent, la partie ", mec" n'est jamais lue, c'est pourquoi votre programme ne l'affiche jamais.

Ma solution, vous devez modifier la taille de votre tableau. Et lors de la lecture, lisez par tranches de 100 ou 1000, par exemple, jusqu'à ce que vous appuyiez sur EOF (read renverra -1).


Le nombre d'octets que vous essayez d'écrire n'est pas correct,

char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){

au lieu de cela, vous devriez faire

char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l', '\0'};
size_t n = strlen(buf); //use strlen 
if(write (fd, buf, n) < 0){

De même, faites-le également pour les autres écritures et lectures. Si vous n'écrivez pas '\0' dans le fichier pour terminer la chaîne, vous ne l'obtiendrez pas lorsque vous lirez les données du fichier.

Pendant la lecture, vous devriez essayer jusqu'à ce que le fichier entier soit lu, c'est-à-dire. vous obtenez EOF .


Il y a juste une petite erreur, il faut changer le sizeof fonction en strlen parce que le sizeof renverra la taille du tableau mais le strlen fonction renvoie simplement la longueur de la chaîne stockée dans le tableau !


Linux
  1. Comment ajouter facilement du texte à la fin du fichier sous Linux

  2. Comment diviser un iso ou un fichier à l'aide de la commande 'split' sous Linux

  3. Comment écrire un fichier avec C sous Linux ?

  4. Comment récupérer un fichier ouvert mais supprimé sous Linux en utilisant ln au lieu de cp ?

  5. Comment ouvrir un fichier dans vim en utilisant pipe

Comment partager des fichiers localement sur Linux en utilisant NitroShare

Comment créer un lien symbolique sous Linux à l'aide de la commande Ln

Comment surveiller les modifications de fichiers à l'aide de fswatch sous Linux

Comment ouvrir un fichier sous Linux

Comment écrire des données dans un fichier sous Linux

Comment changer la limite de fichiers ouverts sous Linux