Atexit1.c |
#include<stdio.h> #include<stdlib.h>
void fun() { printf("over\n"); }
main() { atexit(fun); printf("Process!\n"); } |
Setlock1.c |
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h>
main() { int fd; struct flock lk; int r; //1 打开一个文件 fd = open("a.txt", O_RDWR) if(fd == -1) { printf(":%m\n"),exit(-1); } //2 描述锁 lk.l_type = F_WRLCK; lk.l_wence = SEEK_SET; lk.l_start = 5; lk.l_len = 10; //3 加锁 r = fctnl(fd, F_SETLK, &lk); if(r == 0) { printf("lock success!\n"); } else { printf("lock fail!\n"); } while(1);
} |
Getlock1.c |
#include<stdlio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h>
main() { int fd; struct flock lk; int r;
fd = open("a.txt", O_RDWR); if(fd = -1) { printf("::m\n"), exit(-1); } r = fcntl(fd, F_GETLK, &lk); if(r == 0) { printf("get lock success!\n"); } if(lk.l_type == F_WRLCK) { printf("write lock\n"); } printf("start: %d, len: %d \n", lk.l_start, lk.l_len);
} |
|
|
|
Singnaldeal.c |
#include<unistd.h> #include<stdio.h> #include<signal.h>
main() { while(1) { printf("processing exec"); sleep(1); } }
|
Ctrl+c 发出的就是信号2 SIGINT |
#include<unistd.h> #include<stdio.h> #include<signal.h>
void handle(int s) { printf("This is a signal happens"); }
main() { signal(SIGINT,handle); while(1) { printf("processing exec"); sleep(1); } }
|
#include<unistd.h> #include<stdio.h> #include<signal.h>
main() { while(1) { printf("processing exec %d", getpid()); sleep(1); } }
|
#include<stdio.h> #include<signal.h>
main() { while(1) { kill(22535,SIGINT); sleep(2); }
} |
|
Alarm1.c |
#include<stdio.h> #include<signal.h>
void deal(int s) { printf("get up\n"); }
main() { signal(SIGALRM, deal); alerm(5);
while(1) { } } |
#include<stdio.h> #include<signal.h> #include<sys/time.h>
void deal(int s) { printf("get up\n"); }
main() { struct itimerval v={0}; signal(SIGALRM, deal);
v.it_value.tv_sec = 3; v.it_interval.tv_sec =1; setitimer(ITIMER_REAL, &v, 0);
while(1) { printf(" } } |
|
Demo2.c |
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<signal.h> #include<curses.h> #include<math.h> //rand() #include<time.h>
int num, i; WINDOW *wtime, *wnumb; main() { initscr(); //LINES COLS初始 curs_set0); //隐藏光标 //绘制窗体 wnumb = derwin(stdscr, 3, 11, (LINES-3)/2, (COLS-11)/2); //初始化屏幕,占用行,列。在屏幕中的位置 wtime = derwin(stdscr, 3, 10, 1, (COLS-10)); //添加边框 box(wnumb, 0, 0); box(wtime, 0, 0); //刷屏 refresh(); wrefresh(wtime); wrefresh(wnumb); while(1) { num = 0; for(i = 0; i < 7; i ++) { num = num*10 + rand()%10; } mvwprintw(wnumb, 1, 2, "%07", num); refresh(); wrefresh(wnumb); wrefresh(wtime);
unsleep(10000);
} endwin(); } |
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<fcntl.h> #include<signal.h> #include<curses.h> #include<math.h> //rand() #include<time.h> #include<sys/time.h> #include<string.h> //bzero
int num, i; WINDOW *wtime, *wnumb;
void showtime(int s) { time_t tt;//long struct tm *t; if(s == SIGALRM) { tt = time(0); t = localtime(&tt); mvwprintw(wtime, 1, 1, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec); refresh(); wrefresh(wtime); wrefresh(wnumb); } }
main() { struct itimerval val; bzero(&val, sizeof(struct itimerval)); //初始为0 val.it_value.tv_sec = 0; //延时时间 val.it_value.tv_usec = 1; val.it_interval.tv_sec = 1; //间隔时间 initscr(); //LINES COLS初始
//绑定信号 signal(SIGALRM, showtime);
curs_set0); //隐藏光标 //绘制窗体 wnumb = derwin(stdscr, 3, 11, (LINES-3)/2, (COLS-11)/2); //初始化屏幕,占用行,列。在屏幕中的位置 wtime = derwin(stdscr, 3, 10, 1, (COLS-10)); //添加边框 box(wnumb, 0, 0); box(wtime, 0, 0);
setitimer(ITIMER_REAL, &val, 0);//初始化屏幕后调用定时器
//刷屏 refresh(); wrefresh(wtime); wrefresh(wnumb); while(1) { num = 0; for(i = 0; i < 7; i ++) { num = num*10 + rand()%10; } mvwprintw(wnumb, 1, 2, "%07", num); refresh(); wrefresh(wnumb); wrefresh(wtime);
unsleep(10000);
} endwin(); } |
|
Demo3.c |
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string.h> #include<signal.h> #include<curses.h> #include<math.h>
WINDOW *w; int num, i; main() { initscr(); w = derwin(stdscr, 3, 11, (LINES - 3)/2, (COLS - 11)); box(w, 0, 0); refresh(); wrefresh(w); while(1) { num =0; for(i = 0; i < 7; i ++) { num = num * 10 + rand()%10; } mvwprintw(w, 1, 2, "%07d", num); refresh(); wrefresh(w); usleep(1000); } endwin(); } |
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string.h> #include<signal.h> #include<curses.h> #include<math.h>
WINDOW *w; int num, i;
int isstop = 0; void handle(int s) { if(s == SIGUSR1) { if(isstop == 0) { isstop = 1; } else { isstop = 0; } } }
main() { initscr(); curs_set(0); //0隐藏光标 1,2显示光标 keypad(stdscr, TRUE); //支持功能键 keypad(w, TRUE); //支持功能键 noecho(); //关闭回显 w = derwin(stdscr, 3, 11, (LINES - 3)/2, (COLS - 11)); box(w, 0, 0); refresh(); wrefresh(w);
if(fork()) { signal(SIGUSR1, handle); while(1) { if(isstop == 1) { pause(); // } num =0; for(i = 0; i < 7; i ++) { num = num * 10 + rand()%10; } mvwprintw(w, 1, 2, "%07d", num); refresh(); wrefresh(w); usleep(1000); } } else //子进程 { //等待输入 int ch; while(1) { ch = getch(); if(ch == KEY_ENTER) { kill(getppid(), SIGUSR1) //getppid() 得到父进程ID } } }
endwin(); } |
|
Demotest.c |
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<signal.h> #include<math.h> #include<curses.h>
WINDOW *w; int num;
main() { initscr(); curs_set(0); //隐藏光标 noecho(); //禁止输入回显 w = derwin(stdscr, 3, 11, (LINES- 3)/2, (COLS - 11)/2); //创建子窗体 box(w, 0, 0); //给子窗体家边框 refresh(); wrefresh(w); //显示7位随机数 while(1) { num = random() % 100000000; mvwprintw(w, 1, 2, "%07d", num); refresh(); wrefresh(w); usleep(10000); }
endwin(); } |
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<signal.h> #include<math.h> #include<curses.h>
WINDOW *w; int num; int isstop = 0;
void handle(int s) { if(s == SIGUSR1) { if(isstop == 1) { isstop = 0; } else { isstop = 1; } } } main() { initscr(); curs_set(0); //隐藏光标 noecho(); //禁止输入回显 w = derwin(stdscr, 3, 11, (LINES- 3)/2, (COLS - 11)/2); //创建子窗体 box(w, 0, 0); //给子窗体家边框 refresh(); wrefresh(w); //显示7位随机数 if(fork()) { signal(SIGUSR1, handle); while(1) { if(isstop == 1) { pause(); //pause会被信号中断停止 } num = random() % 100000000; mvwprintw(w, 1, 2, "%07d", num); refresh(); wrefresh(w); usleep(10000); } } else { //处理按键 while(1) { getch(); kill(getppid(), SIGUSR1); } }
endwin(); } |
Signal5.c |
#include<unistd.h> #include<stdio.h> #include<signal.h>
void handle(int s) { printf("This is a signal happens"); sleep(5); }
main() { signal(SIGINT,handle); while(1) { } }
|
Kill5.c |
#include<stdio.h> #include<signal.h>
main() { int i; for(i = 0; i < 5; i ++) { kill(3207,SIGINT); sleep(2); } } |
|
|
Mask1.c |
#include<stdio.h> #include<signal.h>
main() { int sum = 0; int i; for(i = 1; i <= 10; i ++) { sum += i; sleep(1); } printf("sum =%d", sum); printf("Over\n"); } |
#include<stdio.h> #include<signal.h>
main() { int sum = 0; int i; sigset_t sigs; //信号集合 sigemptyset(&sigs); //初始化清空 sigaddset(&sigs, SIGINT); sigprocmask(SIG_BLOCK, &sigs, 0); for(i = 1; i <= 10; i ++) { sum += i; sleep(1); } printf("sum =%d", sum); sigprocmask(SIG_UNBOLOCK, &sigs, 0); printf("Over\n"); } |
#include<stdio.h> #include<signal.h>
main() { int sum = 0; int i; sigset_t sigs, sigp; //信号集合 sigemptyset(&sigs); //初始化清空 sigemptyset(&sigp); sigaddset(&sigs, SIGINT); sigprocmask(SIG_BLOCK, &sigs, 0); for(i = 1; i <= 10; i ++) { sum += i; sigpending(&sigp); if(sigismember(&sigp,SIGINT)) { printf("sigp in\n"); } sleep(1); } printf("sum =%d", sum); sigprocmask(SIG_UNBOLOCK, &sigs, 0); printf("Over\n"); } |
#include<stdio.h> #include<signal.h>
void h(int s) { printf("is not pingbi signal happend!\n"); }
#main { sigset_t sigs; signal(SIGUSR1, h);
sigemptyset(&sigs); sigaddset(&sigs, 2); printf("pingbi start!\n"); sigsuspend(&sigs); printf("pingbi end!\n");
} |
|
#include<stdio.h> #include<signal.h> void h(int s) { printf("chou kong chuli"); } main() { int sum = 0; int i; sigset_t sigs, sigp, sigq; //信号集合 sigemptyset(&sigs); //初始化清空 sigemptyset(&sigp); sigemptyset(&sigq); sigaddset(&sigs, SIGINT); sigprocmask(SIG_BLOCK, &sigs, 0); for(i = 1; i <= 10; i ++) { sum += i; sigpending(&sigp); if(sigismember(&sigp,SIGINT)) { printf("sigp in\n"); suspend(&sigq); //使原来屏蔽信号无效,开放原来信号 //使新的信号屏蔽 //当某个信号处理函数处理完毕 //sigsuspend恢复原来屏蔽信号,返回 } sleep(1); } printf("sum =%d", sum); sigprocmask(SIG_UNBOLOCK, &sigs, 0); printf("Over\n"); } |
|