05.06 - 05.18_111期_Linux_信号

signal 可以自定义进程在接收到指定信号后,会执行的函数

sigaction 除了可以做signal 可以做的功能,还可以通过sigaction这个结构体了解信号的更多具体信息

void sigcb(int sig)
{
    std::cout << " get a sig: " << sig << std::endl;
}

int main()
{
    // sigset_t lnew,lold;
    // struct sigaction act;
    // act.sa_handler = sigcb;  //信号处理函数handler
    // sigemptyset(&act.sa_mask);
    // act.sa_flags = 0;
    // sigaction(2, &act, 0);  //准备捕捉SIGINT信号
    // sigemptyset(&lnew);
    // sigaddset(&lnew, 2);
    // sigprocmask(SIG_BLOCK, &lnew, &lold);  //将SIGINT信号阻塞,同时保存当前信号集
    // std::cout << "Blocked because of 2" << std::endl;
    // sigprocmask(SIG_SETMASK, &lold, NULL);  //取消阻塞
    // pause();

    // sigaction(40, &act, 0);  //准备捕捉40号信号
    // sigemptyset(&lnew);
    // sigaddset(&lnew, 40);
    // sigprocmask(SIG_BLOCK, &lnew, &lold);  //将40号信号阻塞,同时保存当前信号集
    // std::cout << "Blocked because of 40" << std::endl;
    // sigprocmask(SIG_SETMASK, &lold, NULL);  //取消阻塞
    // pause();
    while (i--)
    {
        kill(getpid(), 40);
        kill(getpid(), 2);

        // sleep(1);
    }

    // while (j--)
    // {
    //     kill(getpid(), 40);
    //     // sleep(1);
    // }

}

// int main()
// {
//     struct sigaction act, oact;
//     act.sa_handler = sigcb;
//     sigemptyset(&act.sa_mask);
//     act.sa_flags = 0;
//     sigaction(SIGFPE, &act, &oact);
//     int a = 10;
//     a /= 0;
//     return 0;
// }

// int main()
// {
//     signal(SIGFPE, sigcb);
//     int a = 10;
//     a /= 0;
//     return 0;
// }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是代码的优化版本,包括添加了判断是否存在同样的数据和导入完成后删除源文本的功能: ``` Dim filePaths(5) As String Dim i As Integer ' 设置文件路径 filePaths(0) = "C:\Users\icd\Desktop\5月场景使用清单(按日)\场景服务方案使用清单05.01.xlsx" filePaths(1) = "C:\Users\icd\Desktop\5月场景使用清单(按日)\场景服务方案使用清单05.02.xlsx" filePaths(2) = "C:\Users\icd\Desktop\5月场景使用清单(按日)\场景服务方案使用清单05.03.xlsx" filePaths(3) = "C:\Users\icd\Desktop\5月场景使用清单(按日)\场景服务方案使用清单05.04.xlsx" filePaths(4) = "C:\Users\icd\Desktop\5月场景使用清单(按日)\场景服务方案使用清单05.05.xlsx" filePaths(5) = "C:\Users\icd\Desktop\5月场景使用清单(按日)\场景服务方案使用清单05.06.xlsx" ' 遍历文件路径数组,逐个导入Excel数据 For i = 0 To UBound(filePaths) ' 判断是否存在同样的数据 Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT COUNT(*) FROM 场景使用清单 WHERE 文件路径 = '" & filePaths(i) & "'") If rs.Fields(0).Value > 0 Then MsgBox "文件 " & filePaths(i) & " 中的数据已经存在于数据库中。" Else ' 导入Excel数据 DoCmd.TransferSpreadsheet acImport, 10, "场景使用清单", filePaths(i), True, "" ' 添加文件路径到新导入的记录 CurrentDb.Execute "UPDATE 场景使用清单 SET 文件路径 = '" & filePaths(i) & "' WHERE 文件路径 IS NULL" ' 删除源文本 Kill filePaths(i) End If Next i ``` 需要注意的是,上述代码中的 `场景使用清单` 表需要自行创建,其中需要包含至少以下字段: - ID:主键,自增长 - 文件路径:文本类型,记录导入的Excel文件路径 - 其他字段:根据具体情况添加 此外,还需要添加对 DAO 库的引用。在 VBA 编辑器中,依次点击“工具”→“引用”,勾选“Microsoft DAO 3.6 Object Library”即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值