我有一个cpp代码,我试图用faketime命令运行。我在两台相同的电脑上运行它。它们都运行RHEL 7。我注意到,当我在一台计算机上运行代码时,它完全跳过了我的popen调用。
我的代码实际上是
char ntp[]= "192.168.1.200";
FILE *jitter;
char line[100];
char *start;
char * eol;
char pps[] = "NTPS";
jitter = popen("chronyc sources", "r");
int i;
cout<<"reached here"<<endl;
while(fgets(line,sizeof(line),jitter))
{
cout<<"line isn"<<line<<endl;
if(strstr(line,pps)){
start = strpbrk(line,"#0+-");
cout<<"PPS is "<<start<<endl;
//find new line character and replace it with comma
eol = strrchr(start,'n');
i=eol-start;
start[i]=',';
myfile<<start;
}
if(strstr(line,ntp)){
myfile<<start;
}
}
pclose(jitter);
}
我添加了一个print语句
cout<<"reached here"<<endl;
但是当我用"faketime 'last friday 5pm' ./code"运行它时,由于某种原因,它在一台计算机上从来没有达到打印语句,而在另一台计算机上却达到了。我在网上搜索没有成功(我没有运行近似算法,他们有相同的编译器和制作文件等。我实际上是在做一个git拉取代码并运行它)。
有人知道为什么吗?
感谢看来问题出在SELinux上。显然,当SELinux处于强制模式时,chrony不能很好地交互。我把它切换到允许,它现在表现得像预期的那样。我可以调用faketime 'last friday 5pm' chronyc sources
并在popen代码中使用它