首页 > 解决方案 > 如何打开我在 dev 中创建的文件并在用户空间程序中使用它?

问题描述

当我尝试运行我的代码进行用户测试时,我无法找到该文件,但是当我在 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 中是否做错了什么。你能帮我吗?

我的用户测试.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;
}

标签: c

解决方案


您正在尝试打开设备读/写,但只有 root 具有读/写权限。为了使这些用户可写,文件权限需要是666(所有者、组和其他人的读/写)。我认为以下udev规则可以实现:

KERNEL=="charDevice_part1_0", MODE="0666"
KERNEL=="charDevice_part2_0", MODE="0666"

推荐阅读