Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Unix-Linux编程实践教程-chapter06-signal

Unix-Linux编程实践教程-chapter06-signal

作者头像
零式的天空
发布于 2022-03-02 08:56:23
发布于 2022-03-02 08:56:23
1.2K00
代码可运行
举报
文章被收录于专栏:零域Blog零域Blog
运行总次数:0
代码可运行

第6章 为用户编程:终端控制和信号

有些程序处理从特定设备来的数据.这些与特定设备相关的程序 必须控制与设备的链接.Unix系统中最常见的设备是终端

终端驱动程序有很多设置.各个设置的特定值决定了终端驱动程序的模式. 为用户编写的程序通常需要设置终端驱动程序为特定的模式

键盘输入分为三类,终端驱动程序对这些输入做不同的处理.大多数键 代表常规数据,他们从驱动程序传输到程序,有些键调用驱动程序中的编辑 函数.如果按下删除键,驱动程序将前一个字符从他的行缓冲中删除,并将 命令发送到终端屏幕,使之从显示器中删除字符.最后,有些键调用处理 控制函数.Ctrl-C键告诉驱动程序调用内核中某个函数,这个函数给进程 发送一个信号.终端驱动程序支持若干种处理控制函数,他们都通过发送信号到 进程来实现控制

信号是从内核发送给进程的一种简短消息.信号可能来自用户,其他进程,或 内核本身.进程可以告诉内核,在他收到信号时需要做出怎样的响应

终端模式: 1 规范模式 常见模式,驱动程序输入的字符保存在缓冲,接收到回车才发送到程序

2 非规范模式 缓冲和编辑功能被关闭.stty -icanon

3 raw模式 每个处理步骤都被一个独立的位控制

由进程的某个操作产生的信号被称为同步信号 synchronous signals 由像用户击键这样的进程外的事件引起的信号被称为异步信号 asynchronous signals

进程如何处理信号: 1 接受默认处理 2 忽略信号 3 调用一个函数

大多数signal都可以被捕获或者忽略,但有两个无法被忽略,是SIGKILL SIGSTOP

code

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

/*
 * play_again3.c
 * purpose: ask if user wants another transaction
 * method: set tty into chr-by-chr mode and no-echo mode
 *          set tty into no-delay mode
 *          read char, return result
 * returns: 0 => yes, 1 => no, 2=> timeout
 * better: reset terminal mode on Interrupt
 */
#include <stdio.h>
#include <termios.h>
#include <fcntl.h>
#include <string.h>

#define ASK "Do you want another transaction"
#define TRIES 3     // max tries
#define SLEEPTIME 2 // time per try
#define BEEP putchar('\a')  // alert user

int main()
{
    int response;
    tty_mode(0);                        // save tty mode
    set_cr_noecho_mode();               // set -icanon, -echo
    set_nodelay_mode();                 // noinput => EOF
    response = get_response(ASK, TRIES);
    tty_mode(1);                        // restore tty mode
    return response;
}

int get_response(char * question, int maxtries)
{
    int input;
    printf("%s (y/n)?", question);
    fflush(stdout);                 // force output
    while(1)
    {
        sleep(SLEEPTIME);               // wait a bit
        input = tolower(get_ok_char()); // get next chr
        if (input == 'y')
            return 0;
        if (input == 'n')
            return 1;
        if (maxtries-- == 0)
            return 2;
        BEEP;
    }
}

// skip over non-legal chars and return y,Y,n,N or EOF
get_ok_char()
{
    int c;
    while ((c = getchar()) != EOF && strchr("yYnN", c) == NULL)
        ;
    return c;
}

set_cr_noecho_mode()
/*
 * purpose: put file descriptior 0 into chr-by-chr mode and noecho mode
 * method: use bits in termios
 */
{
    struct termios ttystate;
    tcgetattr(0, &ttystate);        // read curr. setting
    ttystate.c_lflag &= ~ICANON;    // no buffering
    ttystate.c_lflag &= ~ECHO;      // no echo either
    ttystate.c_cc[VMIN] = 1;        // get one char at a time
    tcsetattr(0, TCSANOW, &ttystate);   // install setting
}

set_nodelay_mode()
/* purose: put file descriptor 0 into no-delay mode
 * method: use fcntl to set bits
 * notes: tcsetattr() will do something similar, but it is complicated
 */
{
    int termflags;
    termflags = fcntl(0, F_GETFL);      // read curr. settings
    termflags |= O_NDELAY;              // flip on nodelay bit
    fcntl(0, F_SETFL, termflags);       // and install 'em
}

// how == 0 => save currentmode
// how == 1 => restore mode
// this version handles termios and fcntl flags
tty_mode(int how)
{
    static struct termios original_mode;
    static int original_flags;
    if (how == 0)
    {
        tcgetattr(0, &original_mode);
        original_flags = fcntl(0, F_GETFL);
    }
    else
    {
        tcsetattr(0, TCSANOW, &original_mode);
        fcntl(0, F_SETFL, original_flags);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ProCAST有限元铸造模拟仿真软件CAE
ProCAST作为铸造模拟方案的先锋,是全球首屈一指的材料物理学数值模拟原型和制造流程供应商。PROCAST成功的关键在于使用真实材料物理特性,能够进行更真实的模拟,来代替耗时的物理样机尝试和纠错过程。
用户10047369
2022/09/16
2.4K0
ProCAST有限元铸造模拟仿真软件CAE
Comsol软件是干嘛的?Comsol多物理场仿真软件下载安装,功能介绍
在现代科学技术的发展中,模拟软件是不可或缺的一部分。理论与实践相结合,计算机仿真软件可以帮助我们更好地理解、预测、创新和优化各种物理现象和工程应用。本文将以Comsol Multiphysics® 为例,介绍其独特功能,并探讨其在实际应用中的价值。
优木软件
2023/05/06
8490
固体塑性变形——细观塑性力学
研究材料细观结构对载荷的响应、演化和失效机理,以及细观结构对材料宏观性能的影响的一门新兴学科,是材料科学与固体力学紧密结合的产物。
CAE之家
2022/05/07
6970
流固耦合:基本概念、适用软件及 Abaqus 与 Powerflow 的协同仿真
在工程和科学研究的诸多领域,流固耦合现象广泛存在且对系统性能有着关键影响。理解流固耦合的本质及其应用,对于优化设计、保障安全运行意义重大。同时,借助专业的流固耦合软件,能够更高效地对相关问题进行分析与模拟。接下来,让我们深入探究流固耦合的奥秘,并了解几款主流的流固耦合软件。
思茂信息
2025/04/23
2370
流固耦合:基本概念、适用软件及 Abaqus 与 Powerflow 的协同仿真
Sora再显大模型魔力,CAE也要老将焕新生
在数字经济浪潮汹涌而来的今天,CAE(Computer Aided Engineering,指计算机辅助工程)作为一项成熟的技术领域,正在焕发出全新的生命力。
数据猿
2024/03/04
1730
Sora再显大模型魔力,CAE也要老将焕新生
有限元分析软件Abaqus有哪些功能模块?
Abaqus 是适用于解决从简单(线性)到高度复杂工程问题(多物理场非线性)的一套具有全面仿真计算能力的有限元软件。Abaqus 前处理模块包括丰富的单元、材料模型类型,可以高精度地实现包括金属、橡胶、高分子材料、复合材料、钢筋混凝土、可压缩超弹性泡沫材料以及土壤和岩石等地质材料的工程仿真计算。在多物理场计算方面,Abaqus 不仅能求解结构(应力/位移)问题,还可以高精度求解热传导、质量扩散、热电耦合分析、声学分析、电磁分析、岩土力学分析及压电介质分析。
思茂信息
2025/05/23
810
有限元分析软件Abaqus有哪些功能模块?
有限元分析好不好入门?这些知识你要知道
在工程领域的广袤版图中,有限元分析(Finite Element Analysis, FEA)宛如一把闪耀着智慧光芒的金钥匙,能巧妙开启解决各类复杂问题的大门。但对于众多刚刚踏上探索之旅的初学者而言,有限元分析犹如一座难以攀登的险峻高山,其蕴含的复杂性以及深奥晦涩的数学原理,如同浓重的迷雾,将他们困于山脚,心生迷茫。有限元分析当真如此高不可攀、极难掌握吗?接下来,本文将层层拨开迷雾,为你揭晓这个备受关注问题的答案 。
思茂信息
2025/03/19
1000
有限元分析好不好入门?这些知识你要知道
陈十一院士旗下国产CAE软件开发商获数亿元融资,产品技术已有应用成果
鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 最新消息,由中国科学院院士陈十一创办的十沣科技,已于近日完成A轮和A+轮融资。 融资金额达到数亿人民币。 十沣科技成立于2020年12月,致力于高端工业软件(CAE)以及数字孪生技术的自主研发与产业化。 资料显示,其研发团队核心成员均为来自于国内外著名高校的博士及博士后,先后参与了众多国家级自主CAE软件及核心技术研发项目。 另外,该公司也招揽了不少国际主流商业工业仿真软件公司的研发人才,长期参与具有国际市场竞争力CAE软件及核心技术的开发。 这两轮融
量子位
2022/03/14
1.6K0
CAE软件有哪些?流体力学方面的软件有哪些?ANSYS是CAE软件吗?
强度分析方面有:ansys、abaqus、nastran、adina等算主流。 流体方面有:fluent、cfx、starcd等等。 多体动力学方面有:adams、simpack等等。 电磁:ansoft、magneforce 铸造:magma、anycasting,procast 注塑:mold flow、moldex3d
开物小编
2021/04/23
3.6K0
CAE软件有哪些?流体力学方面的软件有哪些?ANSYS是CAE软件吗?
【AIGC】数理工科研究:深入解析有限元仿真法
ANSYS 是一款功能强大的工程仿真软件,涵盖结构、流体、电磁、声学等多种物理场仿真。
CSDN-Z
2024/10/17
1.2K0
【AIGC】数理工科研究:深入解析有限元仿真法
WELSIM-全球领先的工程仿真CAE前后处理工具
工程仿真CAE软件经过近几十年的高速发展,已经成为了体系庞大、复杂度极高的产品。用户对仿真CAE软件的期望也随之水涨船高,现代仿真软件既需要计算功能丰富、结果准确,还要求图形化交互界面GUI友好,容易学习和上手。这给中小型开发团队带来了很大的挑战。很多优秀的仿真CAE项目,由于缺乏后续的开发资源,导致项目最终失败或无人问津。也有一些历史悠久的优秀求解器,由于缺乏友好的GUI和保证长久发展的自动化运维系统,而无法扩大用户基数与社区影响力。优秀的求解器无人问津,这无疑给社会资源带来了一定的浪费。
WelSim的小仿真
2023/08/23
4120
一文看懂!3D建模与CAE仿真技术的区别
在一些涉及制造、生产的企业中,我们经常会接触到3D建模与仿真技术,大家对于3D建模这个名词也许并不陌生,但相对于仿真技术而言却寥寥无几,甚至还有人将3D建模与仿真技术画上对等号。
思茂信息
2025/02/24
1230
一文看懂!3D建模与CAE仿真技术的区别
想了解材料热动力学?
自然界中发生的一切物理、化学和生物代谢反应,通常都伴随着热效应的变化,人们对热本质的认识经历了漫长曲折的探索历程。
CAE学习笔记
2022/06/13
1.1K0
什么是仿真?一文读懂有限元分析究竟能给人们带来什么
万物皆可开箱,万物皆可盲盒,万物皆可云......世间万物似乎已经被脑洞大开的网友们玩坏了。今天,我们就来聊一聊万物皆可“仿”的仿真软件——Abaqus。
思茂信息
2025/02/20
3560
什么是仿真?一文读懂有限元分析究竟能给人们带来什么
ProCAST有限元铸造工艺模拟软件
ProCAST是一款使用有限元方法(FEM)的铸造仿真软件。可以对包括考虑角度因子的热辐射在内的热传导(热对流),包括铸型填充的流体流动以及全耦合温度场计算(热力学)的应力进行模拟。此外,软件还可以进行微观组织、热处理、晶粒结构和缩孔缩松等模拟。
用户学习笔记
2022/06/28
2.8K1
Abaqus 读什么?软件简介来啦
Abaqus(发音为“ab-uh-kus”)是一款由达索系统公司(Dassault Systèmes)开发的全面仿真计算能力强大的有限元软件。作为工程仿真领域的领先产品之一,Abaqus提供了广泛的功能和工具,可用于解决从简单到高度复杂的工程问题。
思茂信息
2025/03/31
2970
Abaqus 读什么?软件简介来啦
系统仿真明知道“算不准”,但为什么还是研发设计不可缺少的重要一环
我们研究工程问题本来就是一种近似求解,而系统仿真在其中扮演的是一个风险预测的角色,本质上属于数值计算,必然存在计算误差、截断误差、机器误差等,它不像求解算术问题1+1=2这种,必须要得到一个精确值。
用户9925864
2024/07/12
2290
系统仿真明知道“算不准”,但为什么还是研发设计不可缺少的重要一环
国产AI巨头攻破CAE壁垒:DeepSeek如何让Abaqus效率飙升10倍?
传统CAE仿真的本质是通过物理建模还原现实世界的运行规律,其核心局限在于确定性输入与开放性场景的矛盾。当AI引擎与有限元分析深度耦合,形成了“物理规律+数据智能"的双引擎驱动范式。这一转型突破了三个维度的边界:
思茂信息
2025/02/18
4880
国产AI巨头攻破CAE壁垒:DeepSeek如何让Abaqus效率飙升10倍?
问问DeekSeek,为什么裂纹分析推荐用Abaqus?
自国内AI领军企业深度求索(DeepSeek)发布开源大模型DeepSeek-R1以来,这款国产AI产品持续展现强大市场穿透力。最新数据显示,该产品不仅稳居中国区App Store免费应用榜首,更在美国市场力压ChatGPT、Google Gemini、Microsoft Copilot等国际巨头产品,成为首个登顶美国iOS免费总榜的中国生成式AI应用。
思茂信息
2025/03/06
700
问问DeekSeek,为什么裂纹分析推荐用Abaqus?
Abaqus为何是有限元分析领域的佼佼者?
在工程模拟的广袤天地里,有限元分析软件宛如繁星点点,各自闪耀。而 Abaqus,无疑是其中极为璀璨的一颗,堪称有限元分析软件中的 “尖子生”。那么,它究竟凭什么能获此殊荣呢 ?
思茂信息
2025/05/27
990
Abaqus为何是有限元分析领域的佼佼者?
推荐阅读
相关推荐
ProCAST有限元铸造模拟仿真软件CAE
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验