sách gpt4 ai đã đi

信号处理程序中的 C++ 打印?

In lại 作者:行者123 更新时间:2023-12-05 09:33:25 32 4
mua khóa gpt4 Nike

我搜索了很多但没有人回答我的问题,我读到在这样的信号处理程序中使用 cout 是不安全的:

void ctrlZHandler(int sig_num) {
//SIGTSTP-18
std::cout << "smash: got ctrl-Z" << std::endl;
SmallShell::route_signal(sig_num);
}
  1. 如果我将打印移到 route_signal 中,是否可以解决问题?

  2. C++11 中是否有可安全调用的函数列表?

  3. 如果唯一的解决方案是使用 write,你能给我看简短的例子吗?假设 route_signal 有 100 个打印,我应该用 write() 替换所有吗?由于需要分配内存和释放内存,这听起来让人筋疲力尽......

1 Câu trả lời

sử dụngstd::cout的原因不推荐内部信号处理程序是因为信号可能会随时中断您正在运行的代码 std::cout::operator <<不可重入。

这意味着如果您正在执行 std::cout::operator <<当发出信号并在其执行过程中使用它时,结果是未定义的。

所以,不。将其移至 route_signal不会解决这个问题,您应该替换所有 std::cout 的调用在!

一种解决方法是设置一个标志,表明已收到此信号,并在信号返回后在信号处理程序外部创建一个输出。

关于信号处理程序中的 C++ 打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67282215/

32 4 0
Bài viết được đề xuất: r - 计算 R 中的连续日期以确定事件的长度
Bài viết được đề xuất: Python 3 if-else 简写命令语法错误
Bài viết được đề xuất: docker - 库 wkhtmltopdf 在 Docker 中不工作
Bài viết được đề xuất: python - 如何获取class(__init__)的输入参数个数?
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com