まず第一に、これが私のコードの関連部分であり、説明に進みます。
scanf("%d", &option);
fflush (stdin);
//Insert
if(option==1){
printf("enter name\n");
fgets(name,MAX_SIZE,stdin);
printf("name: %s",name);
char str[]="alpha one";
fd=open(argv[1],O_RDWR|O_CREAT|O_TRUNC,S_IRWXU);
write(fd,str,strlen(str) + 1);
pcounter = updateCounter(pcounter, str);
lseek(fd, 0, SEEK_END);
char passpos[5];
sprintf(passpos,"%d",pcounter); //int to string
fd=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,S_IRWXU);
write(fd,passpos,3);
}
str を「アルファ 1」として再定義する理由は、fflush を使用して scanf の後にバッファーをクリアしようとしても、fgets が入力として「/n」を取得し (私が推測する)、「名前」を出力すると、空白になります。主な問題ではありませんが、これに関するヘルプは貴重です。
これはすべてループしているので、プロンプトが表示されたら「1」を押し続けると、バイナリファイルは次のようになるはずだと思いました: alpha onealpha one alpha one ...
ただし、次のように表示されます: アルファ 1、1 を何回押しても。
カウンターを格納する他のバイナリ ファイルと同じことです。正しく更新されるため、最初のループの後には "9" が格納されますが、2 番目のループの後は "18" だけが期待されます: 9 18
lseek を完全に削除し、END ではなく CURR に設定しようとしました。同じ結果です。最大警告をオンにしましたが、コンパイル時に何も表示されません。
これは宿題なので、fopen などは使用できず、システム コマンドしか使用できないことを指摘しておく必要があります。
誰かが実行したい場合の updateCounter 関数は次のとおりです。
int updateCounter(int pcounter, char *str){
int m,charcount = 0;
for(m=0; str[m]; m++) {
charcount ++;
}
printf("chars: %d \n", charcount);
pcounter = pcounter + charcount;
printf("pcounter = %d \n", pcounter);
return pcounter;
}
助けてくれてありがとう。