/ dev / mem дескриптор файла, возвращающий 0 - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь получить доступ к / dev / mem по mmap. Я отключил CONFIG_STRICT_DEVMEM в конфигурации ядра. когда я пытаюсь получить дескриптор файла fd, он всегда возвращает 0, который является дескриптором файла для стандартного ввода. Что здесь не так?

#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 ]

4 голосов
/ 31 января 2020
if(fd = open("/dev/mem",O_SYNC) < 0){

Вы перепутали приоритет оператора. Это анализируется как

fd = (open("/dev/mem",O_SYNC) < 0)

, а не

(fd = open("/dev/mem",O_SYNC)) < 0

, как вы, очевидно, ожидаете. Всегда компилируйте с -Wall и не игнорируйте предупреждения.

1 голос
/ 31 января 2020

Согласно документам

После успешного завершения функция должна открыть файл и вернуть неотрицательное целое число, представляющее дескриптор неиспользуемого файла с наименьшим номером. В противном случае должно быть возвращено -1 и установлено значение errno, указывающее на ошибку. Файлы не должны создаваться или изменяться, если функция возвращает -1.

То есть 0 означает, что ошибки не было.

...