c - 如何打开我在 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;
}
解决方案
您正在尝试打开设备读/写,但只有 root 具有读/写权限。为了使这些用户可写,文件权限需要是666
(所有者、组和其他人的读/写)。我认为以下udev
规则可以实现:
KERNEL=="charDevice_part1_0", MODE="0666"
KERNEL=="charDevice_part2_0", MODE="0666"
推荐阅读
- javascript - TinyMCE 删除文本不更新
- google-app-engine - 使用 Memcache 在本地运行 Google App Engine Flex?
- c# - 抛出 TimeoutException 是一个好习惯吗?
- gradle - 为什么 gradle 包装器需要特定设置来启用代码完成?
- r - 获取每行的非零和行的矩阵行索引和列索引
- python-3.x - 错误:builtin_function_or_method' 对象在 python 中不可下标
- python - 有没有一种计算效率更高的方法来使用 Pandas 找到匹配正则表达式的第一个匹配项?
- jquery - 在表查询中查找值
- javascript - 如何访问车把中的 app.locals 变量
- google-bigquery - Big Query 统一费率定价中复制、加载和导出操作的槽利用