0
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;
}

为什么执行此代码时会产生分段错误?segFault 仅在添加 lseek 操作时发生,否则正常。

4

2 回答 2

2

fpath是一个野指针,即在调用strcpy. 但是,由于您只需要一个const char *文件名,您可以进行以下更改。

改变:

strcpy(fpath,argv[1]);

至:

fpath = argv[1];
于 2013-03-12T15:15:29.873 回答
0

如果要fpath单独使用,请更改定义:

char fpath[30];

现在您strcpy将按预期工作(尽管您应该检查字符串的长度是否低于 30)。但是,您可以直接传递argv[1]to open,因为您没有对它做任何其他事情。

于 2013-03-12T15:31:45.480 回答