Как я могу открыть файл, который я создал в dev и использовать его в программе пространства пользователя? - PullRequest
0 голосов
/ 21 апреля 2019

Когда я пытаюсь запустить свой код для пользовательского теста, я не могу найти файл, но когда я ищу файл в dev, я могу найти его.

achraf@achraf:/dev$ ls -l charDevice_part1_0
crw-r--r-- 1 root root 240, 0 Apr 20 00:52 charDevice_part1_0
achraf@achraf:/dev$ ls -l charDevice_part2_0
crw-r--r-- 1 root root 241, 0 Apr 20 00:36 charDevice_part2_0

Это то, что я вижу в терминале.И каждый раз, когда я запускаю свою пользовательскую тестовую программу, я получаю «файл не существует», я не знаю, сделал ли я что-то не так в моем usertest.c.Можете ли вы помочь мне, пожалуйста?

Мой usertest.c:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main()
{
    int fd;
    ssize_t readVar, writeVar;
    char myRead[10];
    char myWrite[27] = "0";

    fd = open("/dev/charDevice_part2_0", O_RDWR);

    if(fd == -1)
    {
        printf("file does not exist\n");
        exit(-1);
    }
    readVar = read(fd, myRead, 10);
    printf("Number of bytes read: %zd\n", readVar);

    writeVar = write(fd,& myWrite, sizeof(myWrite));
    printf("%zd bytes were written to the kernel\n", writeVar);

    close(fd);
    return 0;
}

1 Ответ

1 голос
/ 21 апреля 2019

Вы пытаетесь открыть устройство для чтения / записи, но только root имеет права на чтение / запись. Чтобы сделать их доступными для записи пользователями, права доступа к файлу должны быть 666 (чтение / запись для владельца, группы и других). Я думаю, что следующие udev правила позволят достичь этого:

KERNEL=="charDevice_part1_0", MODE="0666"
KERNEL=="charDevice_part2_0", MODE="0666"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...