lseek原因分段文件位于O_追加模块中 intmain(intargc,char*argv[]){ int-fd; 抵消; 字符*fpath; char*rbuf; 如果(argc!=2){ printf(“插入文件名作为参数!\n”); 出口(1); } strcpy(fpath,argv[1]); 如果((fd=open(fpath,O|RDWR | O|u APPEND))
lseek原因分段文件位于O_追加模块中 intmain(intargc,char*argv[]){ int-fd; 抵消; 字符*fpath; char*rbuf; 如果(argc!=2){ printf(“插入文件名作为参数!\n”); 出口(1); } strcpy(fpath,argv[1]); 如果((fd=open(fpath,O|RDWR | O|u APPEND)),c,file,segmentation-fault,append,C,File,Segmentation Fault,Append,fpath是一个通配符,也就是说,在调用strcpy之前,您没有为它分配任何存储。但是,由于文件名只需要一个const char*,因此您可以进行以下更改 更改: int main(int argc,char* argv[]){ int fd; off_t foffset; char* fpath; char* rbuf; if(argc!=2){ printf("insert filename as argument!\n");
fpath
是一个通配符,也就是说,在调用strcpy
之前,您没有为它分配任何存储。但是,由于文件名只需要一个const char*
,因此您可以进行以下更改
更改:
int main(int argc,char* argv[]){
int fd;
off_t foffset;
char* fpath;
char* rbuf;
if(argc!=2){
printf("insert filename as argument!\n");
exit(1);
}
strcpy(fpath,argv[1]);
if( (fd = open(fpath,O_RDWR | O_APPEND)) <0 )
perror("error on open()");
//try to use lseek in file opened in O_APPEND mode
char buf[] = "I'm appending some text!\n";
if( write(fd, buf , sizeof(buf)) <0 )
perror("error on write()");
printf("the write() operation was succesful, let's try to seek and read the file..\n");
foffset = lseek(fd,0L,SEEK_CUR);
if(foffset<0)
perror("error on lseek() :");
close(fd);
return 0;
}
致:
如果要单独使用
fpath
,请更改定义:
fpath = argv[1];
现在,您的strcpy将按预期工作(尽管您应该检查字符串的长度是否小于30)。您只需传递
argv[1]
但是,直接打开,因为你没有用它做任何其他事情。fpath
是一个野生点!!为什么会发生这种情况?strcpy是如何产生问题的?但是为什么我不能用read()读取文件?它总是返回0!@ichigo663未定义行为创建了问题,而不是strcpy。碰巧您对strcpy的调用是未定义行为。您正在读哪本书?lseek(fd,0L,SEEK\u CUR);
看起来有问题。也许您希望倒带文件,在这种情况下,您应该使用lseek(fd,0L,SEEK\u SET);
。
fpath = argv[1];
char fpath[30];