首页 / UBUNTU / Ubuntu实现不覆盖的闹钟
Ubuntu实现不覆盖的闹钟
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Ubuntu实现不覆盖的闹钟,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2565字,纯文字阅读大概需要4分钟。
内容图文
![Ubuntu实现不覆盖的闹钟](/upload/InfoBanner/zyjiaocheng/1196/57f6c3ec5ec24addba24b323e49666c3.jpg)
alarm.c
1 #include<stdio.h> 2 #include<signal.h> 3 #include<sys/time.h> 4 #include<stdlib.h> 5 #include"alarm.h"67staticstruct sigaction oldact; 8staticstruct itimerval olditv; 910staticvoid moduler_unload(void); 11 typedef struct12 { 13int token; 14 p q; 15char *c; 16 }TBF; 17 TBF *tbf[BUFFSIZE]={}; 18staticint pos=0; 19void any1(void *s) 20 { 21 printf("%s",(char *)s); 22 fflush(NULL); 23 } 24void any2(void *s) 25 { 26 printf("%s",(char *)s); 27 fflush(NULL); 28 } 29void any3(void *s) 30 { 31 printf("%s",(char *)s); 32 fflush(NULL); 33 } 34void alrm_handler(int s) 35 { 36for(int i=0;i<BUFFSIZE;i++){ 37if(tbf[i]!=NULL){ 38 tbf[i]->token-=1; 39if(tbf[i]->token == 0){ 40 (tbf[i]->q)(tbf[i]->c); 41// (tbf[i]->token)--;42 free(tbf[i]); 43 tbf[i]==NULL; 44 }/*else if(tbf[i]->token >0){ 45 (tbf[i]->token)--; 46 }*/47 } 48 } 49 } 50staticvoid moduler_load(void) 51 { 52struct sigaction act; 53struct itimerval itv; 5455 act.sa_handler=alrm_handler; 56 act.sa_flags=0; 57 sigemptyset(&act.sa_mask); 58 sigaction(SIGALRM,&act,&oldact); 5960 itv.it_interval.tv_sec=1; 61 itv.it_interval.tv_usec=0; 62 itv.it_value.tv_sec=1; 63 itv.it_value.tv_usec=0; 64 setitimer(ITIMER_REAL,&itv,&olditv); 6566 atexit(moduler_unload); 67 } 68staticvoid moduler_unload(void) 69 { 70 sigaction(SIGALRM,&oldact,NULL); 71 setitimer(ITIMER_REAL,&olditv,NULL); 72 } 73void anytimer_alarm(int s,p any,char *ss) 74 { 75 TBF *tk=NULL; 76if(pos==0){ 77 moduler_load(); 78 pos=1; 79 } 80 tk=malloc(sizeof(TBF)); 81if(tk==NULL){ 82 printf("malloc failed"); 83return; 84 } 85 tk->token=s; 86 tk->q=any; 87 tk->c=ss; 8889 tbf[pos]=tk; 90 pos++; 91 }
alarm.h
1 #ifndef __ALARM_H 2 #define __ALARM_H 34#define BUFFSIZE 10 56 typedef void (*p)(void *); 7void any1(void *s); 8void any2(void *s); 9void any3(void *s); 1011void anytimer_alarm(int s,p any,char *ss); 1213141516#endif
main.c
1 #include<stdio.h> 2 #include<unistd.h> 3 #include"alarm.h"4int main(void) 5 { 6 anytimer_alarm(3,any1,"hello"); 7 anytimer_alarm(2,any2,"world"); 8 anytimer_alarm(5,any3,"apue"); 910while(1){ 11 write(1,"*",1); 12 sleep(1); 13 } 1415 }
makefile:
1 main:main.o alarm.o 2 gcc main.o alarm.o -o main 3 clean: 4 rm -rf *.o main
结果如下:
zj@zj-pc:~/6.dir/3-23.c/alarm_hw$ make cc -c -o main.o main.c cc -c -o alarm.o alarm.c gcc main.o alarm.o -o main zj@zj-pc:~/6.dir/3-23.c/alarm_hw$ ./main **world*hello**apue*****************************^C
原文:https://www.cnblogs.com/Survivor123/p/10588665.html
内容总结
以上是互联网集市为您收集整理的Ubuntu实现不覆盖的闹钟全部内容,希望文章能够帮你解决Ubuntu实现不覆盖的闹钟所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。