我正在使用 Ubuntu 18.04 我想制作一个可以阻止屏幕录制的程序。 我尝试了两种方法来实现这一目标
1.在c++中使用强制文件锁
#include<bits/stdc++.h>
#include<unistd.h>
#include<fcntl.h>
#include <sys/file.h>
using namespace std;
int main(int argc,char **argv)
{
int fd = open(argv[1], O_RDWR);
static struct flock lock;
lock.l_type = F_WRLCK; //F_WRLCK F_RDLCK
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
lock.l_pid = getpid();
cout<< fcntl(fd, F_SETLKW, &lock)<<'\n';
while (1) { } // to run this application so lock didn't release
//will add release lock function here
return 0;
}
/dev/video0
我将锁定用于相机的设备文件。同样的方式我会锁定用于录屏的文件(目前我不知道用于录屏的设备文件)。这将使文件保持锁定状态,以便其他应用程序无法读取该文件。
2. 更改文件权限
如果我运行
sudo chmod 002 /dev/snd
(snd
负责音频),它将把文件权限更改为组写入,因此由于没有权限,任何应用程序都无法读取数据。它不会播放任何音频,甚至有音频的视频。
我所面临的两种方法的问题
在第一种方法中 有时文件没有被锁定,当它被锁定时,应用程序仍然可以从中读取数据。
在第二种方法中
当我恢复权限时chmod 772
,应用程序无法读取该更改意味着它们无法播放任何音频,为了达到这种效果,我必须重新启动系统。
需要解决什么问题
在第一种方法中 文件被锁定后,任何进程都无法读取该设备文件。
在第二种方法中
当我恢复权限时772
,我不必重新启动应用程序就可以读取该效果。我应该重新启动该音频进程而不是 PC。