- 论坛徽章:
- 0
|
1 /*
* =====================================================================================
3 *
4 * Filename: test.c
5 *
6 * Description: 对同一文件进行边写边读.
7 * 反复写1个字节,然后往回读取出1个字节.
8 *
9 * Version: 1.0
10 * Created: 2009-05-27 16:16:07
11 * Revision: none
12 * Compiler: gcc
13 *
14 * Author: KuangHaiBin (khb.hnu(AT)gmail.com)
15 * Company: Hunan University
16 *
17 * =====================================================================================
18 */
19
20 #include "stdio.h"
21 #include "stdlib.h"
22 #include "errno.h"
23
24 int
25 main()
26 {
27 char data_writed = '0';
28 char data_readed = 0;
29 int length_bytes_readed = 0;
30
31 int file_pos = 0; /* 文件指针偏移值 >0 */
32 char *fp_file_name = "1.txt";
33 FILE *fp = NULL;
34
35 fp = fopen( fp_file_name, "wb+" );
36
37 if ( fp == NULL )
38 {
39 fprintf ( stderr, "couldn't open file '%s'; %s\n",
40 fp_file_name, strerror(errno) );
41 exit (EXIT_FAILURE);
42 }
43
44 for (data_writed = '0' ; data_writed <= '9'; data_writed += 1)
45 {
46 /*fseek(fp, length_bytes_readed, SEEK_SET);*/
47
48 file_pos = ftell(fp); /* 获取当前文件指针偏移 */
49 printf("The file pointer is at byte %ld\n", file_pos);
50
51 fwrite(&data_writed, sizeof(char), 1, fp);
52
53 fseek(fp, length_bytes_readed, SEEK_SET); /* 回退文件指针 */
54 fread(&data_readed, sizeof(char), 1, fp);
55
56 length_bytes_readed += 1;
57 printf("data_readed = %c\n", data_readed);
58 }/* end of for (data_writed = 'A'...) */
59
60 if ( fclose(fp) == EOF )
61 {
62 fprintf ( stderr, "couldn't close file '%s'; %s\n",
63 fp_file_name, strerror(errno) );
64 exit (EXIT_FAILURE);
65 }
66
67 return(0);
68 }
gcc结果:
The file pointer is at byte 0
data_readed = 0
The file pointer is at byte 1
data_readed = 1
The file pointer is at byte 2
data_readed = 2
The file pointer is at byte 3
data_readed = 3
The file pointer is at byte 4
data_readed = 4
The file pointer is at byte 5
data_readed = 5
The file pointer is at byte 6
data_readed = 6
The file pointer is at byte 7
data_readed = 7
The file pointer is at byte 8
data_readed = 8
The file pointer is at byte 9
data_readed = 9 | Vc 6结果:
The file pointer is at byte 0
data_readed = 0
The file pointer is at byte 1
data_readed = 0
The file pointer is at byte 1
data_readed = 0
The file pointer is at byte 2
data_readed = 0
The file pointer is at byte 3
data_readed = 0
The file pointer is at byte 4
data_readed = 0
The file pointer is at byte 5
data_readed = 0
The file pointer is at byte 6
data_readed = 0
The file pointer is at byte 7
data_readed = 0
The file pointer is at byte 8
data_readed = 0 |
上面的代码中gcc的结果是正确的,vc的结果错误.
但是把代码中第46行代码注释去除,得到的结果是一样的.都正确.
第46行代码的作用是显示设置写文件指针位置.根据推算,是不需要设置的.
原因是什么呢?一直不解.
[ 本帖最后由 khb_gl 于 2009-5-27 17:29 编辑 ] |
|