日期:2014-05-16  浏览次数:20825 次

lseek的第二个参数似乎没有起作用啊
我照着APUE第三章的讲解,测试一下lseek函数。
首先关闭stdout,再打开一个临时文件,这个临时文件就是stdout的目标了,然后lseek寻址,offset我指定一个正整数。

我期待的结果是,因为offset是正数2,所以写文件的时候应该先写入两个空格,再写入我指定的字符串。但是运行的结果是,lseek的第二个参数似乎不起作用,每次运行之后看/tmp/my1文件,结果都是增加了"123”,并没有增加我预期中的空格。

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(void){
    close(STDOUT_FILENO);
    int fd=open("/tmp/my1",O_CREAT|O_RDWR);
    lseek(fd,2,SEEK_END);
    printf("123");
    return 0;
}


是不是我对lseek的理解有问题? 还是说在SEEK_END的情况下,lseek的第二个参数>0没有意义? 到底如何解释呢?

------解决方案--------------------
你的SEEK_END是什么,已经是文件末了你还能往哪移?
lseek(fd, 2, SEEK_SET);
------解决方案--------------------
-2 或者 write 一个字符就有作用了
------解决方案--------------------
引用:
-2 或者 write 一个字符就有作用了

朋友,能再说明白一点么?
我像楼主所说那样试过了,也是不行。同样是明白。
------解决方案--------------------
第二个参数 有用的,很有用的

是设置当前的文件指针的位置,设置的的一个参数的偏移量就是得依据第二个参数设置的位置。