gpt4 book ai didi

Perl 脚本在信号处理程序中重新打开文件

转载 作者:行者123 更新时间:2023-12-01 11:44:09 26 4
gpt4 key购买 nike

我有这个 perl 脚本:

#!/bin/perl
use strict;
use warnings;
use Time::HiRes qw(usleep);
my $fd;
sub reopen {
open $fd, ">>", "file.log" or die $!;
}
$SIG{USR1} = \&reopen;
reopen();
while(1){
syswrite $fd, time . " ($$): message\n";
usleep(100000);
}

我在信号处理程序中重新打开文件句柄。安全吗?

最佳答案

[1]。从 5.8.1 开始,实际的信号处理程序只需设置一个标志,说明已收到信号[2]。该标志在语句之间进行检查。系统调用(例如 usleep)在被信号中断时返回错误 $!{EINTR},允许检查标志。

信号会中断usleepreopen会在下一条语句(syswrite[3]) 被评估。


  1. 嗯,你可能想做 local ($!, $^E); 以防被中断的代码使用这些。
  2. 除非您禁用“安全信号”。
  3. 为什么使用 syswrite 而不是 print?是为了避免缓冲吗?使用 $fd->autoflush(1); 来做到这一点。

关于Perl 脚本在信号处理程序中重新打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990842/

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