2019.03.20王苛震

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <sys/time.h>
  4 #include <signal.h>
  5 #include <string.h>
  6 #include <unistd.h>
  7
  8 #define    MAX        1024
  9
 10 typedef struct {
 11     int sec;
 12     void (*any)(void *);
 13     char *s;
 14 } alrm_st;
 15
 16 static alrm_st *p[MAX];
 17 static int flag;
 18
 19 void anytimer_alarm(int sec_cus, void (*any_cus)(void *s), void *s_cus);
 20 static void clk_first(void);
 21 static int _getpos(void);
 22 static void clk_fun(int s);
 23
 24 static void any1(void *s)
 25 {
 26     printf("%s", (char *)s);
 27     fflush(NULL);
 28 }
 29
 30 static void any2(void *s)
 31 {
 32     printf("%s", (char *)s);
 33     fflush(NULL);
 34 }
 35
 36 static void any3(void *s)
 37 {
 38     printf("%s", (char *)s);
 39     fflush(NULL);
 40 }
 41
 42 int main(void)
 43 {
 44     anytimer_alarm(3, any1, "hello");
 45     anytimer_alarm(2, any2, "world");
 46     anytimer_alarm(5, any3, "apue");
 47
 48     /*
 49      **world*hello**apue******
 50      */
 51     while (1) {
 52         write(1, "*", 1);
 53         sleep(1);
 54     }
 55
 56     return 0;
 57 }
 58
 59 void anytimer_alarm(int sec_cus, void (*any_cus)(void *s), void *s_cus)
 60 {
 61     int td = 0;
 62
 63     if (flag == 0) {    //加载信号
 64         clk_first();
 65         flag == 1;
 66     }
 67     td = _getpos();    //获取当前索引值
 68     if (td == -1)
 69         return;
 70
 71     p[td] = malloc(sizeof(alrm_st));    //开辟静态区空间
 72     if (p[td] == NULL)
 73         return;
 74
 75     p[td]->sec = sec_cus;    //配置结构体成员
 76     p[td]->any = any_cus;
 77     p[td]->s = malloc(sizeof(*s_cus));    //开辟结构体存字符串的静态区空间
 78     if (p[td]->s == NULL) {
 79         free(p[td]);
 80         return;
 81     }
 82     strcpy(p[td]->s, s_cus);    //拷贝参数中的字符串
 83 }
 84
 85 static void clk_first(void)    //设置信号与时钟
 86 {
 87     struct itimerval val, oldval;
 88     struct sigaction act, oldact;
 89
 90     val.it_interval.tv_sec = 1;
 91     val.it_interval.tv_usec = 0;
 92     val.it_value.tv_sec = 1;
 93     val.it_value.tv_usec = 0;
 94     setitimer(ITIMER_REAL, &val, &oldval);
 95
 96     act.sa_handler = clk_fun;
 97     sigemptyset(&act.sa_mask);
 98     act.sa_flags = 0;
 99     sigaction(SIGALRM, &act, &oldact);
100 }
101
102 static int _getpos(void)    //1024上限 从头分配
103 {
104     for (int i = 0; i < MAX; i++) {
105         if (p[i] == NULL) {
106             return i;
107         }
108     }
109     return -1;        //无空间
110 }
111
112 static void clk_fun(int s)    //函数倒计时
113 {
114     for (int i = 0; i < MAX; i++) {
115         if (p[i] != NULL) {
116             p[i]->sec -= 1;
117             if (p[i]->sec == 0)
118                 p[i]->any(p[i]->s);
119         }
120     }
121 }
kkj@:~/apue_my/hw3$ ./clock       //终端编译结果
**world*hello**apue******^C

原文地址:https://www.cnblogs.com/ymfqq/p/10585874.html

时间: 2024-10-08 02:17:42

2019.03.20王苛震的相关文章

2019.03.20

MVT模式   MVT各部分的功能:   M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理.       V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回响应.       T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html. Django分页 from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage def page_view(re

大数据学习2019.03.20

Java常用API API(Application Programming Interface)应用程序接口 原文地址:https://www.cnblogs.com/homelessdog/p/10562247.html

【谜客帝国】第148届梦中人主擂谜会(2019.03.15)

[谜客帝国]第148届梦中人主擂谜会(2019.03.15) 主持:瓷    计分:小白 1.夫人囚禁于何处(5字对景点位置咨询语)娘子关在哪 2.找你去战胜排名第二的人(外教练)索尔斯克亚 3.二月里来换新装(莫言小说<蛙>人物)王胆 4.一心除皇上,自然搭上命(科技名词)全息 5.布什更二(货币冠量)一便士 6.“身形婀娜,虽裹在一袭宽大缁衣之中,仍掩不住窈窕娉婷之态”(3字古埃及国王,卷帘格)美尼斯 [注:面为<笑傲江湖>中对仪琳的描写,美尼斯为是埃及第一王朝的开国国王] 7

【谜客帝国】第149届汝隅主擂谜会(2019.03.30)

[谜客帝国]第149届汝隅主擂谜会(2019.03.30) 主持:瓷    计分:雪宝 1.赞歌唱6.1(动漫人物•卷帘)哆啦美 [赞扣美,1和6唱出来是哆啦] 2.“枕前泪共阶前雨,隔着窗儿滴到明”(明人)戚继光 3.湘玉呼展堂,赶紧去上工(4字对酒介绍语,含酒名)叫老白干 4.留下雄信待聚会(金融词二)存单.通汇 5.五音未闻宫徵羽(国际事件•重门)贸易战 [注:先扣商角,重门出底] 6.殷功是否尚存生(对歌手到场情况询问语2+3)崔健在不在 [注:崔护,字殷功] 7.“孤与云长,誓同生死:

分布式技术一周技术动态 2016.03.20

分布式系统实践 1. 基于Mesos和Docker的分布式计算平台 https://mp.weixin.qq.com/s?__biz=MzAxMDgzOTA2Mw==&mid=402769128&idx=1&sn=cea3ad1357bd9312acf1768c0a493bfd&scene=1&srcid=0318BTuxT0fsFYwPjpeyuDOa&key=710a5d99946419d90fbc1e7600cce055b6e997d6afafc74c

[Intern][2019.03.16]针对已有的HTML如何只凭JS改动?

刚入职的时候看到公司用的HTML日志生成工具附带的Panel,工具不够用,找个Fail还要找半天,于是自己琢磨着添砖加瓦.以前也是个半吊子前端工程师,现在可倒好,想要改页面却连页面生成的模板在哪里都不知道,只有通过改动JavaScript才能实现对页面的修改. 固然,操作DOM有原版的 document.getElementsBy 一族,可是它们get的时候不能通过 class 和 标签 来区分,比如: <div class="FAIL"> <tr class=&qu

2019.03.30 Dialog demo 一个标准使用的dialog程序

1 PROGRAM zdemo_dialog. 2 3 INCLUDE zdemo_dialogtop. 4 INCLUDE zdemo_dialogo01. 5 INCLUDE zdemo_dialogi01. 6 INCLUDE zdemo_dialogf01. 7 INCLUDE zdemo_dialoghelp. *&---------------------------------------------------------------------* *& 包含       

18.03.20 vijos1059积木城堡

描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他现在

loj刷题记录2019/2/20

#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有 NNN 个房间,MMM 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 DiD_iDi? 为如果所有的通道都被修建,第 iii 号房间与第 111 号房间的最短路径长度: 而 SiS_iSi? 为实际修建的树形城堡中第 iii 号房间与第 111 号房间的路径长度: 要求对于所有整数 iii (1≤i≤N1\le i\le N1≤i≤N),有 Si=DiS_i= D_iSi?=Di?