mmap映射文件的时候出现错误,提示no such device,求大神指导。

没有壳的snail 2014-07-22 03:45:35
用mmap把一个字符设备文件映射到内存中,结果出现错误,字符设备文件是存在的,也是可以打开的,请问各位大神是什么问题,代码如下。
#define print_tty "/dev/ttyS2"


int main(int argc, char **argv)
{
int scan_fd,fd,seri_fd;
char s[32] = {0};
pthread_t thread;
FILE *fp = NULL;
int on = 1;
unsigned long mmap_size, mmap_addr,addr_seri,size_seri;
int mmap_addr_fd = -1;
char *mmap_addr_seri;

//打印机全局变量和共享内存初始化
seri_fd = open(print_tty, O_RDWR);
if(seri_fd < 0)
{
perror("open");
close(mmap_addr_fd);
return (-1);
}

scan_fd = open("/dev/scanner", O_RDWR);



if(scan_fd < 0)
{
perror("open");
close(mmap_addr_fd);
close(seri_fd);
return (-1);
}

fd = open("/proc/memshare/phymem_addr", O_RDONLY);
if(fd < 0)
{
printf("cannot open phymem_addr\n");
close(mmap_addr_fd);
close(seri_fd);
close(scan_fd);
return -1;
}
read(fd, s, sizeof(s));
sscanf(s, "%lx", &addr_seri);
close(fd);

fd = open("/proc/memshare/phymem_size", O_RDONLY);
if(fd < 0)
{
printf("cannot open phymem_size\n");
close(mmap_addr_fd);
close(seri_fd);
close(scan_fd);
return -1;
}
read(fd, s, sizeof(s));
sscanf(s, "%lu", &size_seri);
close(fd);

printf("addr_seri=%lx-------size_seri=%lu\n",addr_seri,size_seri);

mmap_addr_seri = mmap(0, size_seri, PROT_READ, MAP_SHARED, scan_fd, addr_seri);
if((char *)mmap_addr_seri == NULL)
{
printf("no data in sharemem\n");
close(mmap_addr_fd);
close(seri_fd);
close(scan_fd);
return -1;
}

if(mmap_addr_seri == (void *)(-1))
{
perror("mmap error");
}

printf("mmap_addr_seri------------%x\n",mmap_addr_seri);
}
...全文
448 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2014-07-22
  • 打赏
  • 举报
回复
“不是所有的设备都能进行mmap抽象,比如像串口和其他面向流的设备就不能做mmap抽象” http://www.cnblogs.com/geneil/archive/2011/12/08/2281222.html

23,128

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧