#include "stdio.h"
#include <fcntl.h>
main()
{
int fd;
int size;
int i;
fd = open("c:\\tmp\\w9.dbf",O_CREAT|O_RDWR,00777);
for (i=0;i<600;i++)
{
int wd;
lseek(fd,i*sizeof(int),SEEK_SET);
if (537 == i ) wd=2586;
else wd = i;
write(fd,&wd,sizeof(int));
}
lseek(fd,537*sizeof(int),SEEK_SET);
read(fd,&size,sizeof(int));
printf("size:%d \n",size);
close(fd);
}
10 个解决方案
#1
size:2090030679
我的结果……gcc 4.4.3 codeblocks
我的结果……gcc 4.4.3 codeblocks
#2
调整了文件路径后和你一样……怪事,换C标准库试试,这个程序没有一定要用系统调用的需求吧
#3
我跟踪了一下程序,实际上在read(fd,&size,sizeof(int));这句读出的字节数为0,换成2586以外的数据就正确性,真TM的邪门儿了。
#4
开始用fstream,ACE_FILE等,发现结果不对才用低层的,结果还是不对。
#5
换C标准库是对的,Windows下还是用标准库吧
#include <stdio.h>
int main()
{
FILE* fd = 0;
int size = 0;
int i = 0;
fd = fopen("c:\\tmp\\w9.dbf","wb+");
for (i=0;i<600;i++)
{
int wd;
fseek(fd,i*sizeof(int),SEEK_SET);
if (537 == i ) wd=2586;
else wd = i;
fwrite(&wd,sizeof(int),1,fd);
}
fseek(fd,537*sizeof(int),SEEK_SET);
fread(&size,sizeof(int),1,fd);
printf("size:%d \n",size);
fclose(fd);
}
#6
#7
将 int 换为 unsigned int 会表示更大的数值。
#8
编译环境为dev-cpp,这个软件一直在改进状态,它只适合初学者,不适合应用开发。个人见解。
建议你采用操作系统(或者一个成熟软件包)标准开发库上,不值得把时间浪费在使用测试版本软件这个这些环节上。
我们开发环节,一般都用正式发布版的gcc(glibc采用发布版)和vs开发工具。如果出现软件包的问题,一般都可以在官方网站上查到相关的FAQ。
建议你采用操作系统(或者一个成熟软件包)标准开发库上,不值得把时间浪费在使用测试版本软件这个这些环节上。
我们开发环节,一般都用正式发布版的gcc(glibc采用发布版)和vs开发工具。如果出现软件包的问题,一般都可以在官方网站上查到相关的FAQ。
#9
可能是两个平台对于范围的理解不一样
#10
至今未能找到正确的解释,用标准库确实能得到正确的结果。其实标准库最终也是用的低层函数。之所以正确是因为fread 带缓冲的缘故吧。如果自己定义缓冲,用read 也能得出正确结果。
不管怎么说,先结贴吧。
不管怎么说,先结贴吧。
#1
size:2090030679
我的结果……gcc 4.4.3 codeblocks
我的结果……gcc 4.4.3 codeblocks
#2
调整了文件路径后和你一样……怪事,换C标准库试试,这个程序没有一定要用系统调用的需求吧
#3
我跟踪了一下程序,实际上在read(fd,&size,sizeof(int));这句读出的字节数为0,换成2586以外的数据就正确性,真TM的邪门儿了。
#4
开始用fstream,ACE_FILE等,发现结果不对才用低层的,结果还是不对。
#5
换C标准库是对的,Windows下还是用标准库吧
#include <stdio.h>
int main()
{
FILE* fd = 0;
int size = 0;
int i = 0;
fd = fopen("c:\\tmp\\w9.dbf","wb+");
for (i=0;i<600;i++)
{
int wd;
fseek(fd,i*sizeof(int),SEEK_SET);
if (537 == i ) wd=2586;
else wd = i;
fwrite(&wd,sizeof(int),1,fd);
}
fseek(fd,537*sizeof(int),SEEK_SET);
fread(&size,sizeof(int),1,fd);
printf("size:%d \n",size);
fclose(fd);
}
#6
#7
将 int 换为 unsigned int 会表示更大的数值。
#8
编译环境为dev-cpp,这个软件一直在改进状态,它只适合初学者,不适合应用开发。个人见解。
建议你采用操作系统(或者一个成熟软件包)标准开发库上,不值得把时间浪费在使用测试版本软件这个这些环节上。
我们开发环节,一般都用正式发布版的gcc(glibc采用发布版)和vs开发工具。如果出现软件包的问题,一般都可以在官方网站上查到相关的FAQ。
建议你采用操作系统(或者一个成熟软件包)标准开发库上,不值得把时间浪费在使用测试版本软件这个这些环节上。
我们开发环节,一般都用正式发布版的gcc(glibc采用发布版)和vs开发工具。如果出现软件包的问题,一般都可以在官方网站上查到相关的FAQ。
#9
可能是两个平台对于范围的理解不一样
#10
至今未能找到正确的解释,用标准库确实能得到正确的结果。其实标准库最终也是用的低层函数。之所以正确是因为fread 带缓冲的缘故吧。如果自己定义缓冲,用read 也能得出正确结果。
不管怎么说,先结贴吧。
不管怎么说,先结贴吧。