我正在尝试通过对tty0设备的IOCtl调用来“嘟嘟” PC扬声器-代码基本上是这样的:
int fd = open("/dev/tty0", O_RDONLY);
if (fd == -1 || argc != 3) return -1;
return ioctl(fd, KDMKTONE, (atoi(argv[2])<<16)+(1193180/atoi(argv[1])));
这可以从根或使用sudo正常运行。如果我尝试从非特权用户运行,将无法正常工作。
strace最初显示出问题是缺少打开/ dev / tty0设备的权限-但是,如果我将tty0权限更改为666,则它将在ioctl上失败,并显示EPERM错误。
我尝试将用户置于tty和Dialout组中,但没有任何作用
任何想法吗?