ubuntu 14.04 amd64中简单的文件操作出错,bug?

内核编译和嵌入式产品的设计与开发
回复
i386
帖子: 2
注册时间: 2014-05-03 9:32
系统: Win8.1 64-bit

ubuntu 14.04 amd64中简单的文件操作出错,bug?

#1

帖子 i386 » 2014-05-03 9:42

代码: 全选

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

#define SEC_SIZE			0x200

typedef unsigned char u8;
typedef unsigned int u32;

int main(int argc, char* argv[])
{
	int ret = -1;
	int in, out;
	u8 buf[SEC_SIZE];

	in = open("in.bin", O_WRONLY);

	if(in < 0)
	{
		printf("file in.bin open failed!\n");
		goto exit0;
	}

	out = open("out.bin", O_RDONLY);

	if(out < 0)
	{
		printf("file out.bin open failed!\n");
		goto exit1;
	}

	ret = read(out, buf, SEC_SIZE);

	if(ret ^ SEC_SIZE)
	{
		printf("read error!\n");
		goto exit2;
	}

	ret = write(in, buf, SEC_SIZE);

	if(ret ^ SEC_SIZE)
	{
		printf("write error!\n");
		goto exit2;
	}

exit2:
	close(out);

exit1:
	close(in);

exit0:
	return (ret < 0) ? -1 : 0;
}

测试环境:ubuntu 14.04 64位,gcc 4.8.2
编译: gcc -m32 -o app main.c
说明:64位环境编译32位应用程序,需要先:apt-get install gcc-multilib

事先准备2个文件:
out.bin,512字节
in.bin,520字节且最后几个字节不是 0x00

运行完之后,发现in.bin的513 ~ 520字节全部变成0x00

我使用 fopen()-fread()-fwrite()-fclose()这种API测试,结果一样的!

更奇怪的是:
同样的代码,同样的编译方法,在之前的ubuntu 12.04 64位,gcc 4.6.3版本里面,运行结果是正常的,不会修改512字节之后的内容
头像
b33e
帖子: 3864
注册时间: 2011-06-07 14:20
系统: Mint18

Re: ubuntu 14.04 amd64中简单的文件操作出错,bug?

#2

帖子 b33e » 2014-05-03 10:03

此贴通过审核,其他主题因内容重复,请予以删除。
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: ubuntu 14.04 amd64中简单的文件操作出错,bug?

#3

帖子 astolia » 2014-05-05 17:04

我这里试了下没有重现你说的现象。
用strace/gdb看一下到底发生了啥
i386
帖子: 2
注册时间: 2014-05-03 9:32
系统: Win8.1 64-bit

Re: ubuntu 14.04 amd64中简单的文件操作出错,bug?

#4

帖子 i386 » 2014-05-05 20:45

astolia 写了:我这里试了下没有重现你说的现象。
用strace/gdb看一下到底发生了啥
谢谢,原因已经查明,因为我是在虚拟机里面设置的Ubuntu与Windows共享文件夹里面测试的,其实是Windows的文件夹,在Ubuntu内部的目录里面测试是没有问题的。

说明我用的虚拟机对共享文件夹的支持存在bug。
回复