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];