2016-08-02 87 views
0
int main(int argc, char *argv[]) 

{ 

int i, j, count; 
int f1; 
char buf[16]; 
f1 = open(argv[1], O_RDWR | O_APPEND); 
if(f1 == -1) 
    perror("open failed"); 

if(lseek(f1, 0, SEEK_SET) == -1) 
    printf("lseek failed\n"); 


while(count = read(0, buf, 16)) { 
    write(f1, buf, count); 
} 

close(f1); 
return 0; 
} 

这是我的代码。它打开作为参数给出的文件,并且应该在文件开始时从控制台写入所有文件。该文件中追加模式打开,然后lseek的用来描述符移动到开始。 f1的值没有变化,不会打印lseek失败。lseek不能使用文件的追加模式

回答

0

因为如果文件打开作为O_APPEND模式,调用写()的每一次中,偏移指针移动到文件的结束处理的原子操作。

这用于许多工艺追加“文本”到该文件的目的。(例如日志文件),因为只有从位于文件的末尾。

所以尝试改变代码:只在O_RWONLY标志

打开的文件(如果需要寻求EOF使用lseek的())。

没有开放使用O_APPEND标志(),写()不动了每个呼叫的偏移量自动EOF。