- 论坛徽章:
- 0
|
在linux中有一个函数:
static int tdsync_queue_write(struct disk_driver *dd, uint64_t sector, int nb_sectors, char *buf, int id, void* private)
{
……
write(prv->fd, buf, size);
……
}如此调用的话可以将buf中大小为 size的内容正确的写入硬盘。
但是,如果我加了一个memcpy,如下所示:
static int tdsync_queue_write(struct disk_driver *dd, uint64_t sector, int nb_sectors, char *buf, int id, void* private)
{
……
listNode = (page_node_t *)malloc(sizeof(page_node_t));
memset(listNode->buf, '\0', BUF_SIZE);// 此句写与不写不影响结果
memcpy(listNode->buf, buf, size);
write(prv->fd, listNode->buf, size);
……
}如此调用则write返回-1,并且errno的值为22.
其中 page_node_t结构的定义如下:
#define BUF_SIZE 4096
typedef struct page_node{
uint64_t offset;
unsigned int size;
char buf[BUF_SIZE];
struct page_node *next;
struct page_node *prev;
}page_node_t;
size的值为1024、2048、4096等 但不会超过4096。
我觉得用memcpy之后buf和listNode->buf中的内容应该是一样的呀,为什么后者写入的时候会出错呢?百思不得其解,求各位大侠帮助! |
|