关于open
在linux下,有以下函数,open lseek read 都正常,但是读出来的全部问零,(文件不为零)是在windows下产生的二进制文件!
**********************************************
* data_read
*
* input: addr: flash read address
* count: flash read count unit is byte
* buffer: flash read data buffer
*
* return: nagative int: please refer system call read
* 0 : init read failed
* others : read cout unit is byte
*
* ********************************************/
size_t data_read(void *addr, size_t count, void *buffer)
{
int fd;
off_t read_off;
if(!file2flash_inited)
{
file2flasherror("mtd not be mounted \n");
return 0;
}
if(buffer == NULL)
{
file2flasherror("return buffer is NULL \n");
return 0;
}
if( ((u_int32)addr < FLASH_START_ADDR) ||
((u_int32)addr >= ( FLASH_START_ADDR + FLASH_SIZE) ) )
{
file2flasherror("flash address %p beyond flash region", addr);
return 0;
}
read_off = (unsigned int)(addr) - FLASH_START_ADDR;
fd = open(flashfilename, O_RDONLY , S_IRUSR);//| O_CREAT
if (fd != 0)
{
off_t offset;
ssize_t readlen;
offset = lseek(fd, read_off, SEEK_SET);
if(offset != read_off)
{
file2flasherror("read lseek to %d failed \n", read_off);
close(fd);
return 0;
}
count = (count > (FLASH_SIZE - read_off)) ? (FLASH_SIZE - read_off) : count;
readlen = read(fd, buffer, count);
if (readlen >= 0)
/* some data has been read */
{
/* all no read buffer fill with 0xff */
memset((char *)buffer + readlen , 0xFF, count - readlen);
/* if read some data, always regard as read count bytes */
readlen = count;
}
close(fd);
return readlen;
}
else
{
file2flasherror("flash read open file %s failed \n", flashfilename);
return 0;
}
} /* end of data read */
有谁能帮忙看看!