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;
}这是我的代码。它会打开作为参数给定的文件,并且应该在文件的开头写入console中的所有内容。该文件在append模式下打开,然后使用lseek将描述符移到开头。f1的值没有变化,而不是打印失败。
发布于 2016-10-18 18:49:09
因为如果文件以写模式打开,每次调用O_APPEND ()时,偏移量指针都会移动到文件的末尾,以处理原子操作。
这用于许多进程将“文本”附加到文件中。(例如日志文件)仅从文件末尾开始。
因此,尝试将代码更改为:
仅在O_RWONLY标志中打开文件(如果需要查找EOF,请使用lseek())。
如果没有在open()中使用O_APPEND标志,write()不会在每次调用时自动将偏移量移动到EOF。
https://stackoverflow.com/questions/38721291
复制相似问题