如何打开在dev中创建的文件并在用户空间程序中使用它?

时间:2019-04-20 21:40:28

标签: c

当我尝试运行代码进行用户测试时,无法找到该文件,但是当我在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 个答案:

答案 0 :(得分:1)

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

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