信号处理程序不会看到全局变量

2024-01-11

问题是:这个程序应该接收来自 stdin 的输入并计算插入的字节数; SIGUSR1 信号将停止主程序,并在文件标准错误上打印当我发送 SIGUSR1 时已复制了多少字节。

这就是我的老师希望我这样做的方式:在一个终端运行中

cat /dev/zero | ./cpinout | cat >/dev/null

而从第二个终端发送信号

kill -USR1 xxxx

其中 xxxx 是 cpinout 的 pid。

我更新了之前的代码:

/* cpinout.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

#define BUF_SIZE 1024   

volatile sig_atomic_t countbyte = 0;
volatile sig_atomic_t sigcount = 0;

/* my_handler: gestore di signal */
static void sighandler(int signum) {
    if(sigcount != 0)
        fprintf(stderr, "Interrupted after %d byte.\n", sigcount);
    sigcount = countbyte;    
}

int main(void) {
  
    int c;
    char buffer[BUF_SIZE];
    struct sigaction action;

    sigemptyset(&action.sa_mask);
    action.sa_flags = 0;
    action.sa_handler = sighandler;
    if(sigaction(SIGUSR1, &action, NULL) == -1) {
        fprintf(stderr, "sigusr: sigaction\n");
        exit(1);
    }
    while( c=getc(stdin) != EOF ) {
        countbyte++;
        fputc(c, stdout);
    }
    return(0);
}

信号只能写volatile sig_atomic_t根据 C89 的变量和POSIX 7 http://pubs.opengroup.org/onlinepubs/9699919799/functions/signal.html标准:

如果信号处理程序引用除 errno [Option End] 之外的任何具有静态存储持续时间的对象 [CX] [Option Start],而不是将值分配给声明为 volatile sig_atomic_t 的对象,则行为未定义

实现通常会提供更多功能,但我怀疑您是否提供了使用非易失性全局变量或 printf 的功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

信号处理程序不会看到全局变量 的相关文章

  • Linq - 从表达式 创建表达式

    我有一个谓词Expression
  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • ASP.NET Web 应用程序中的身份验证遇到问题

    我正在尝试对从登录页面登录我的 Web 应用程序的用户进行身份验证 我正在使用本教程 http support microsoft com kb 301240作为指南 它几乎准确地解释了我希望做什么 但是当我输入用户名和密码时 验证不起作用
  • .crt 部分?这个警告是什么意思?

    我最近收到此警告 VC 2010 warning LNK4210 CRT section exists there may be unhandled static initializers or terminators 我假设这是关键部分
  • 将字符串作为 PChar 从 CSharp 传递到 Delphi DLL

    我正在尝试将字符串从 C 传递到 Delphi 构建的 DLL Delphi DLL 需要 PChar 这是Delphi导出 procedure DLL Message Location PChar AIntValue integer st
  • 警告 C4800:“int”:强制值为 bool“true”或“false”(性能警告)

    我的代码中有这个问题 bool CBase isNumber return id MID NUMBER bool CBase isVar return id MID VARIABLE bool CBase isSymbol return i
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 从 array_map 匿名函数内部调用类方法

    我正在尝试从一个对象中调用我的对象的方法之一array map匿名函数 到目前为止 我收到了预期的错误 致命错误 不在对象上下文中时使用 this 我知道为什么我会收到此错误 我只是不知道如何实现我想要的目标 有人有任何建议吗 这是我当前的
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • C# 枚举到字符串自动转换?

    是否可以让编译器自动将我的 Enum 值转换为字符串 这样我就可以避免每次都显式调用 ToString 方法 这是我想做的一个例子 enum Rank A B C Rank myRank Rank A string myString Ran
  • 处理“未找到细胞”。 Excel 中的错误

    我正在使用 Excel VSTO 应用程序并使用以下代码在工作表中查找错误单元格 Excel Range rngTemp Excel Range rngErrorRange Excel Worksheet Sheet1 Excel Work
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 使用数据绑定,如何将包含表情符号的文本绑定到标签并使其正确显示?

    我正在编写一个应用程序来连接 WordPress BuddyPress API 该应用程序将允许用户通过 API 相互发送消息 当这些消息包含表情符号时 我很难正确显示它们 以下是 API 返回的消息文本的简短示例 Hi x1f642 ho
  • Type.GetInterfaces() 仅适用于声明的接口

    首先 像这样的问题有很多 也许有些OP甚至在问同样的问题 问题是这些问题的答案 无论是否接受 都没有真正回答这个问题 至少我找不到 如何确定类直接声明的接口 而不是由父级或声明的接口继承的接口 e g interface I interfa
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 我在哪里可以购买 .app TLD? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以购买 app 顶级域名 TLD 我去了 Network Solutions GoDaddy 等
  • Nexus 支持批量上传工件吗?

    我想知道我们是否可以将工件批量上传到 Nexus 的存储库中 您可以通过多种方式做到这一点 使用 Nexus工件上传页面 http www sonatype com books nexus book reference ch04s05 ht
  • 触发器:插入的表如何工作?如何访问它的行?

    我有下表 Data Table name ID Identity column PCode Postal Code 我创建了以下触发器 CREATE TRIGGER Trig ON Data FOR INSERT AS BEGIN Sele
  • 为什么我的指令抛出“Error: $injector:unpr Unknown Provider”

    我正在努力将我的控制器 工厂和指令重构为推荐的Angular 风格指南 https github com johnpapa angular styleguide file templates and snippets for 角度片段 ht
  • .NETBeans + 请求范围 - 有可能吗?

    我有我的网络应用程序 我需要 当用户执行请求 我的意思是 调用页面 时 创建一个对象 该对象为每个请求 因此数据在每个请求时更新 和每个用户存储一些信息 它从数据库获取这些信息 所以UserA 与 UserB 不共享相同的对象 我曾经使用
  • 使用 Word 时出现运行时错误 462 Excel VBA

    第二次或第三次运行此循环时 我不断收到 462 错误 我不认为我有任何漂浮的物体 但也许我错过了一些东西 我对此有点陌生 该宏将从 Excel 中获取所有图表 将它们作为图片粘贴到 Word 中 调整它们的大小 保存文档并关闭它 For 循
  • PHP/JS - 动态创建缩略图或存储为文件

    对于图像托管 Web 应用程序 对于我存储的图像 是否可以使用 PHP 或其他方式 动态创建缩略图 或者我应该将 1 个或多个不同大小的缩略图保存到磁盘并加载它们 任何帮助表示赞赏 将缩略图保存到磁盘 图像处理需要大量资源 并且根据图像的大
  • 使用 fread 导入 csv 时出现“字符串中嵌入 nul”错误

    我有一个大文件 3 5G 我试图使用它导入data table fread 它最初是从一个 rpt 文件创建的 该文件以文本形式打开并保存为 CSV 这对于较小的文件 相同类型的数据 相同的列等 效果很好 这只是为了更长的时间范围和更广泛的
  • Chrome、Opera 和 Safari 中 Flash 下弹出弹出菜单

    我在以下位置创建了一个弹出导航菜单 http lixmebel com http lixmebel com gt 在 gt 下 在 Firefox 和 Internet Explorer 中 一切正常 菜单会在 Flash 上弹出 但在 C
  • kafka-console-consumer 自定义反序列化器

    我想使用我的自定义value deserializer使用 kafka console consumer 命令行工具时 像这样的事情 kafka console consumer bootstrap server kafka2 29092
  • 当只有其中之一进行类型检查时,为什么这两个隐式都匹配?

    我正在尝试诊断由不同的隐式扩展错误引起的编译器错误 这是我所看到的 scala Welcome to Scala 2 13 1 OpenJDK 64 Bit Server VM Java 1 8 0 252 Type in expressi
  • 如何循环空手道响应数组并将其传递到另一个 Web 服务响应的 json 路径中

    我正在使用空手道版本 0 8 0 1 我想执行以下步骤来测试一些响应 我做了一个获取网络服务 1 使用 jsonpath 从 Web 服务 1 的响应中查找货币值 currencies 第 2 步给出了以下结果 USD HKD SGD IN
  • 当结果具有相同分数时在 Azure 搜索中进行分页

    我在电子商务网站上使用 Azure 搜索 现在在搜索页面上遇到分页问题 当我重新加载搜索页面时 我可以获得不同的产品顺序 因此 当我使用分页时 我可以在不同页面上看到相同的产品 这一点至关重要 我开始研究出了什么问题 我在 Microsof
  • 从 cakephp 的数组中删除数组键

    打印数组 array Order gt array id gt 1 base price gt 65 min price gt 95 检索数据时是否可以删除键 Order 如果不是 我如何使用 array shift 或以一行结束并防止出现
  • Haskell 中类型安全的“read”

    向你学习 Haskell http learnyouahaskell com making our own types and typeclasses讨论以下数据类型 data Day Monday Tuesday Wednesday Th
  • Python 等待队列和事件

    我有一个队列和一个事件 我想在事件设置为 True 时退出循环 但是循环中有一个queue get 它会阻塞 直到其中有东西为止 当设置 closeEvent 事件标志时 如何中止 self commandQueue get 的等待 注意
  • webapp2.Route 带有可选的前导部分

    我正在学习webapp2 http webapp improved appspot com 框架以其强大的Route http webapp improved appspot com api webapp2 html webapp2 Rou
  • 当方法名称是动态时,如何在 Ruby 中调用方法? [复制]

    这个问题在这里已经有答案了 video Video new thumb video thumbnail video thumbnail video video thumbnail works fine video thumbnail vid
  • Java 中处理循环事件的优雅方法?

    我认为这对我来说不是一个特定的问题 每个人以前可能都遇到过这个问题 为了正确地说明它 这里有一个简单的 UI 正如您所看到的 这两个旋转器控制着一个变量 A 唯一的区别是他们使用不同的视图来控制它 由于这两个旋钮的显示值是同步的 因此会出现
  • 信号处理程序不会看到全局变量

    问题是 这个程序应该接收来自 stdin 的输入并计算插入的字节数 SIGUSR1 信号将停止主程序 并在文件标准错误上打印当我发送 SIGUSR1 时已复制了多少字节 这就是我的老师希望我这样做的方式 在一个终端运行中 cat dev z