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 !