该项目位于运行Linux raspberrypi 4.19.58-v7l +的Raspberry Pi 4上。
我有以下get_page.sh
脚本:
#!/bin/bash
line=$(head -n 1 ../configuration.txt)
wget -q -i $line -O url_response.txt
我有一个名为Big_ppd_display_try1
的c ++程序,它会调用上述脚本:
int readConfig(std::ifstream& configFile, std::string (&string)[10]) {
std::cout<<"Inside int readConfig\n";
int counter=0;
if(!configFile) {
std::cout<<"configuration.txt couldn't be opened\n";
} else {
// Get content line by line of txt file
int i = 0;
while(getline(configFile, string[i++]));
//for debug only
for(int k = 0; k<i; k++) std::cout<<"string["<<k<<"]= "<<string[k]<<"\n";
counter = i-1;
}
return counter;
}
int main() {
while(true) {
std::cout<<"-------------------------------------------"<<std::endl;
system("/var/www/html/4panel/get_page.sh");
char urlResponsePath[]="url_response.txt";
std::ifstream urlResponseFile;
urlResponseFile.open(urlResponsePath, std::ifstream::in);
if(urlResponseFile.is_open()) {
std::cout<<"Successfully opened file: "<<urlResponsePath<<std::endl;
std::string inputs[10];
int lines;
lines = readConfig(urlResponseFile, inputs);
std::cout<<"# of lines: "<<lines<<std::endl;
} else {
std::cout<<"Error, Could not open file: "<<urlResponsePath<<std::endl;
}
usleep(2000*1050);
}
return 0;
}
此c ++程序的执行方式如下:sudo ./Big_ppd_display_try1
上面编写的代码应:
url_response.txt
中的URL正文重写configuration.txt
:line=$(head -n 1 ../configuration.txt)
; url_response.txt
url_response.txt
中逐行复制std::string inputs[10];
的内容问题是出现以下错误:
url_response.txt: Permission denied
所有文件都位于/var/www/html/4panel
中
这些是权限:
drwxr-xr-x 3 www-data pi 4096 Aug 24 01:57 4panel
-rwxrwxrwx 1 pi pi 1080684 Aug 24 01:57 Big_ppd_display_try1
-rw-rw-r-- 1 pi pi 5739 Aug 24 01:57 Big_ppd_display_try1.cc
-rw-r--r-- 1 pi pi 255660 Aug 24 01:57 Big_ppd_display_try1.o
-rw-r--r-- 1 pi pi 1082 Aug 23 21:33 Makefile
-rwxrwxrwx 1 pi pi 90 Aug 24 01:46 get_page.sh
-rw-rw-rw- 1 pi pi 56 Aug 23 20:26 url.txt
-rw-r--r-- 1 pi pi 0 Aug 24 01:52 url_response.txt
我不是Linux多产用户,因此我对文件权限,命令以及-n -i -l -a等之类的知识知之甚少。
在不使用sudo的情况下执行c ++程序:./Big_ppd_display_try1
不会返回url_response.txt: Permission denied
错误。
但是我需要使用sudo
运行该程序,因为其余的代码包含使用hzeller's rgb led matrix library,并且要求该程序以root身份运行:“不是以root身份运行,这意味着我们可以除非是实时内核,否则不能正确控制时序。这将严重破坏颜色稳定性和矩阵闪烁。”
在初始化硬件以最小化安全问题之后,程序将特权从root
降到daemon
。但是当被迫继续以root
的身份运行时,不会显示Permission denied
错误,有效地解决了我的问题。