我有一个使用select
轮询stdin
文件描述符的进程,当我从控制台运行它时工作正常。在cron
下添加此流程后,我看到输出表明在select
下使用stdin
调用cron
时出现问题。有没有办法在使用cron
时解决这个问题并让进程认为有一个stdin
文件描述符什么都没有收到?
答案 0 :(得分:0)
所以我做的是检查/ proc / self / fd / 0,如果它不是/ dev / pts /,我跳过select
命令。使用类似的东西检查你的fd 0
bool rc = true;
char linkName[256];
const char* fd0 = "/proc/self/fd/0";
const char* devPts = "/dev/pts";
struct stat sb;
lstat(fd0, &sb);
readlink(fd0, linkName, sb.st_size + 1);
linkName[sb.st_size] = '\0';
if (strncmp(linkName, devPts, sizeof(devPts)) != 0)
{
std::cout << "The application's stdin file descriptor doesn't point to /dev/pts/XXX, input will be ignored" << std::endl;
rc = false;
}
return rc;