学习 Linux高级编程06_B
来源:互联网 发布:行知科技 编辑:程序博客网 时间:2024/06/06 01:28
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");
}
- 学习 Linux高级编程06_B
- 学习 Linux高级编程05_B
- 学习 Linux高级编程07_B
- 学习 Linux高级编程08_B
- 学习 Linux高级编程09_B
- 学习 Linux高级编程06_A
- 学习 Linux高级编程01
- 学习 Linux高级编程02
- 学习 Linux高级编程03
- linux高级编程学习网址
- Linux高级编程学习资料
- 学习 Linux高级编程05_A
- 学习 Linux高级编程07_A
- 学习 Linux高级编程08_A
- 学习 Linux高级编程09_A
- 寒假学习 第四、五天 (linux 高级编程)
- c++ 学习笔记(高级linux编程) day1
- c++ 学习笔记(高级linux编程) day2
- 学习 Linux高级编程06_A
- 盘点大佬高考:马云数学考1分 俞敏洪英语考33分 【人生无常】
- MySQL存储过程----创建索引前,先判断索引是否已经存在,如果存在,则不添加,如果不存在,添加
- fragment
- ZSH配置文件
- 学习 Linux高级编程06_B
- 简单的弹性返回顶部JS代码
- 学习J2EE必须掌握的36个Package
- maven- test 配置
- openCV kalman滤波器初始化问题
- Google 开源项目风格指南
- Maven常见问题解决方案
- Linux服务配置:Vsftp的基本配置
- boot.img和recovery.img的结构分析