LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 949|回复: 6

询问mmap的问题。

[复制链接]
发表于 2009-1-18 12:19:01 | 显示全部楼层 |阅读模式
刚开始学习linux编程,一些基本问题不太懂,不要笑话。
我看了一下mmap的函数原形 void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
其它的都还很好理解,就port和flags这两个就有点问题了。
prot命名显示的是int型,怎么在实际应用时port用的是PORT_RDONLY什么的。我觉得这个prot跟linux文件的权限好像差不多。于是在例子中按照文件的权限把port参数改成了{0-7}数字模式,一编译,居然还通过了,貌似执行也没什么问题。我想知道这种做法是不是正确的。
还有flag,显示的也是int型,是不是也可以用数字来代替呢?
最后在编译的时候mmap必须一定要root的权限,我看了一篇文章说只要flag选某个值,就可以用普通用户权限编译,是不是这样呢?
发表于 2009-1-18 20:25:31 | 显示全部楼层
莫非楼主不知道 C 中有一种东西叫 "宏"? 而且有一种操作称为 "位操作"?

另外, 错别字有点多
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-19 17:08:27 | 显示全部楼层
我知道C语言里有“宏”和“位操作”,但我的问题跟“宏”“位操作”有什么关系吗?
回复 支持 反对

使用道具 举报

发表于 2009-1-19 22:10:07 | 显示全部楼层
思考: PROT_READ 和 PROT_WRITE 这样的东西是什么.
思考: PROT_READ | PROT_WRITE 又是什么.

顺便再思考: 00755 这样的东西又是什么, 为什么楼主用这样的 "数字模式" 可以完成编译
回复 支持 反对

使用道具 举报

发表于 2009-1-20 09:13:19 | 显示全部楼层
那些东西都是宏,其实本质上就是定义好的数字。编译的时候就会改回数字。但是代码阶段还是宏
回复 支持 反对

使用道具 举报

发表于 2009-1-20 21:17:04 | 显示全部楼层
你把这个看成是一个 数字 的 更形象 的 表示方法 就好啦。
本质上 是数字参数 ,实际上 为了 便于 理解 和 记忆 ,才有 了 用 宏到想法 。
就是说,在真正的代码处理过程中,编译器会把它替换成原来的数字格式的。
回复 支持 反对

使用道具 举报

发表于 2009-2-10 02:44:18 | 显示全部楼层
精华啊   不过我已经看过了 哈哈 还是顶下  *^__^*                         
   
     
      
   
   
  
     
      
------------------------------------------------------------
春庭蚕丝雪白霜,灞原风雨定舒颈王
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表