我正在尝试通过mmap访问/ dev / mem。我已在内核配置中禁用了CONFIG_STRICT_DEVMEM。当我尝试获取文件描述符fd时,它总是返回0,这是Standard输入的文件描述符。这是怎么了?
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/mman.h>
int main ()
{
int fd = -1;
if(fd = open("/dev/mem",O_SYNC) < 0){
printf("Error opening file \n");
close(fd);
return (-1);
}
else printf("/dev/mem fd: %d \n", fd);
return 0;
}
输出:/ dev / mem fd:0
答案 0 :(得分:4)
if(fd = open("/dev/mem",O_SYNC) < 0){
您弄乱了运算符的优先级。解析为
fd = (open("/dev/mem",O_SYNC) < 0)
不是
(fd = open("/dev/mem",O_SYNC)) < 0
您显然希望如此。始终使用-Wall
进行编译,并且不要忽略警告。
答案 1 :(得分:1)
根据文档
成功完成后,该功能将打开文件并 返回一个非负整数,表示未使用的最低编号 文件描述符。否则,应返回-1并将errno设置为 指出错误。如果以下情况,则不得创建或修改文件: 函数返回-1。
所以0
表示没有错误。