0

LinuxでCプログラミングを使用して、リソースファイルから既存のファイルに追加しようとしています。しかし、私のコードはそのためには機能しません。any1は、コードの何が問題になっているのか、またO_APPENDがどのように機能しているのかを教えてくれますか?ありがとう :)

char ifile[150];
char tfile[150];
char cc;

system("clear");
printf("Please enter your resource file name : ");
gets(ifile);
printf("Please enter your destination file name : ");
gets(tfile);

int in, out;

in = open(ifile, O_RDONLY);
int size = lseek(in,0L,SEEK_END);
out = open(tfile, O_WRONLY |O_APPEND);
char block[size];
int pdf;
while(read(in,&block,size) == size)
    pdf = write(out,&block,size);
close(in);close(out);
if(pdf != -1)
    printf("Successfully copy!");
else
    perror("Failed to append! Error : ");
printf("Press enter to exit...");
do
{
    cc = getchar();
} while(cc != '\n');
4

1 に答える 1

1

ここでの問題は、ファイルのサイズを知るために読み取りカーソルをファイルの最後に移動しますが、ファイルの先頭に巻き戻して読み取ることができないことです。したがって、をread()読み取りEOF、を返します0

int size = lseek(in, 0L, SEEK_END);
out = open(tfile, O_WRONLY | O_APPEND);

する必要があります

int size = lseek(in, 0L, SEEK_END);
lseek(in, 0L, SEEK_SET);
out = open(tfile, O_WRONLY | O_APPEND);

さらに、読み取りと書き込みを行うときは、がすでにポインタ(またはアドレス)であるためblock、ではなくを使用する必要があります。&blockblock

ああ、そしてまた...out書き込み用にファイルを開くと...ファイルがまだ存在しない場合は失敗します。

権限を644に設定して作成する方法は次のとおりです。

out = open(tfile, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);

(ファイルがすでに存在する場合、これは効果がありません)

于 2012-12-07T20:09:30.730 に答える