これは宿題の一部です。さて、私は宿題で物事を動かすことができなかったので、スニペットを取り出して、何が悪いのかを理解するためにそれをいじり始めました。
CのLinuxで、テキストファイルを開く/作成し、それに何かを書き込んで閉じ、読み取り/書き込みおよび追加モードで開き、最後に何かを追加しようとしています(この例では、文字列"、 お前")。ただし、何も追加されていませんが、書き込みメソッドもエラーをスローしていません。どうしたのかわからない。
コードは次のとおりです。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#define BUFFSIZE 4096
int main(){
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
int fd = open("tempfile.txt", O_RDWR | O_CREAT, mode);
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){
printf("Error in write\n");
printf("%s", strerror(errno));
return 1;
}
close(fd);
int fd2 = open("tempfile.txt", O_RDWR | O_APPEND);
printf("appending dude:\n");
char buf2[6] = {',', ' ', 'd', 'u', 'd', 'e'};
size_t p = sizeof(buf2);
if(write (fd2, buf2, p) < 0){
printf("Error in write\n");
printf("%s", strerror(errno));
return 1;
}
char buf3[BUFFSIZE];
lseek(fd2, 0, SEEK_SET);
if(read (fd2, buf3, BUFFSIZE) < 0){
printf("Error in read\n");
printf("%s", strerror(errno));
return 2;
}
int i;
for (i = 0; i < strlen(buf3); ++i){
printf("%c", buf3[i]);
}
printf("\n");
close(fd2);
return 0;
}
モード変数を S_IRWXU | S_IRWXG | S_IRWXO、2 番目の open ステートメントで 3 番目の引数としてモードを渡す、2 番目の open ステートメントで追加モードでファイルを開くだけ、2 番目の open ステートメントで 3 番目の引数として追加モードを渡す、など。
私ができる最善の方法は、APPEND モードを使用せずに RDWR で開き、既存のテキストに直接上書きすることですが、それは私が望んでいることではありません。また、lseek のようなことは承知していますが、ここでの目的は厳密には追加モードを使用してファイルの末尾にテキストを追加することです。私はlseekしたくありません。
これを見て何か手がかりはありますか?私が理解していない明らかな何かがあると確信しています。
どうもありがとう。