我尝试使用Linux中的C编程从资源文件执行附加到现有文件。但是,我的代码不起作用,任何人都可以告诉我代码有什么问题,以及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');
答案 0 :(得分: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
而不是&block
,因为block
已经是指针(或地址)。
哦,还有......打开文件out
进行写入...如果文件不存在,则会失败。
此处如何创建权限设置为644:
out = open(tfile, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
(如果文件已经存在,这将不起作用)