gpt4 book ai didi

c++ - 使用 crontab 运行 c++ 程序, "cin"不等待我的输入

转载 作者:行者123 更新时间:2023-11-28 05:00:46 30 4
gpt4 key购买 nike

我正在使用以下 C++ 代码(称之为 test.cpp)。我只想从控制台读取一个 int。

#include <iostream>
#include <unistd.h>
#include <limits>
using namespace std;
int main()
{
for (;;)
{
cout << "please make a choice" << endl;
int choice;
cin >> choice;
if (!cin)
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "error"<< endl;
usleep(1000);
}
else
{
cout << "cin is: " << choice << endl;
}

}
}

当我手动执行它时,一切正常,控制台等待我的输入。但是,当我在 crontab 中运行它时(命令类似于:53 10 * * */root/test),它会打印很多东西(如下所示)。它似乎忽略了“cin”并继续运行。有谁知道为什么?

在 crontab 中运行时,我不应该使用 cin 吗?我知道这没有意义,但我只是想找出原因。

please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error
please make a choice
error

最佳答案

作为Mark Setchell在评论中注意到,cron 没有将任何终端附加到已执行命令的标准输入。这是有原因的。 cron 执行的所有命令都在后台运行,无需用户干预。

通常,所有由 cron 执行的程序都是以这样的方式编写的,即它们在执行期间从某个文件或数据库中提取数据进行处理。如果您必须将任何数据传递给程序的标准输入,那么您需要在那里传递一些东西。例如:

53 10 * * * echo "Test" | /root/test 

关于c++ - 使用 crontab 运行 c++ 程序, "cin"不等待我的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087252/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com