/ dev / mem文件描述符返回0

时间:2020-01-31 04:56:48

标签: c linux memory file-descriptor

我正在尝试通过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

2 个答案:

答案 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表示没有错误。

相关问题