- 论坛徽章:
- 0
|
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
int main(void)
{
char buf[3];
FILE *myfile;
myfile = fopen("test.txt", "r+");
char *cur;
char *cur1;
printf("test.txt's fd = %d\n", myfile->_fileno);
printf("offset = %d\n", lseek(myfile->_fileno, 0, SEEK_CUR));
printf("**************\n");
fgets(buf, 3, myfile);
printf("offset = %d\n", lseek(myfile->_fileno, 0, SEEK_CUR));
printf("read buffer base %p\n", myfile->_IO_read_base);
printf("read buffer end %p\n", myfile->_IO_read_end);
printf("read buffer ptr %p\n", myfile->_IO_read_ptr);
printf("write buffer base %p\n", myfile->_IO_write_base);
printf("write buffer end %p\n", myfile->_IO_write_end);
cur = myfile->_IO_read_base;
while(cur < myfile->_IO_read_end)
{
printf("%c", *cur);
cur++;
}
printf("**************\n");
fputs("1", myfile);
printf("offset = %d\n", lseek(myfile->_fileno, 0, SEEK_CUR));
printf("read buffer base %p\n", myfile->_IO_read_base);
printf("read buffer end %p\n", myfile->_IO_read_end);
printf("read buffer ptr %p\n", myfile->_IO_read_ptr);
printf("write buffer base %p\n", myfile->_IO_write_base);
printf("write buffer ptr %p\n", myfile->_IO_write_ptr);
cur1 = myfile->_IO_write_base;
while(cur1 < myfile->_IO_write_ptr)
{
printf("%c", *cur1);
cur1++;
}
printf("**************\n");
fgets(buf, 3, myfile);
printf("offset = %d\n", lseek(myfile->_fileno, 0, SEEK_CUR));
//while(1);
printf("read buffer base %p\n", myfile->_IO_read_base);
printf("read buffer end %p\n", myfile->_IO_read_end);
printf("read buffer ptr %p\n", myfile->_IO_read_ptr);
printf("write buffer base %p\n", myfile->_IO_write_base);
printf("write buffer ptr %p\n", myfile->_IO_write_ptr);
cur = myfile->_IO_read_base;
while(cur < myfile->_IO_read_end)
{
printf("%c", *cur);
cur++;
}
printf("**************\n");
return 0;
}
***************************************************************************************************************************
test.txt的内容为
abcdefg
***************************************************************************************************************************
root@localhost#./test
test.txt's fd = 3
offset = 0
**************
offset = 8
read buffer base 0xb7fb3000
read buffer end 0xb7fb3008
read buffer ptr 0xb7fb3002
write buffer base 0xb7fb3000
write buffer end 0xb7fb3000
abcdefg
**************
offset = 8
read buffer base 0xb7fb3008
read buffer end 0xb7fb3008
read buffer ptr 0xb7fb3008
write buffer base 0xb7fb3002
write buffer ptr 0xb7fb3003
1**************
offset = 8
read buffer base 0xb7fb3000
read buffer end 0xb7fb3005
read buffer ptr 0xb7fb3002
write buffer base 0xb7fb3000
write buffer ptr 0xb7fb3000
defg
**************
***************************************************************************************************************************
test.txt的内容为
ab1defg
***************************************************************************************************************************
问题:
1对于以可读可写方式打开的文件,输入和输出使用的相同的缓冲区。fgets之后进行fputs,为什么_IO_write_base被设为_IO_read_ptr原先的值。
2.offset = 8,fputs是如何将1写到c的位置上的。文件表里好像只有offset一个控制偏移的变量。 |
|