您的位置:首页 > 运维架构 > Linux

学习 Linux高级编程06_B

2013-06-09 10:55 381 查看
 

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");

}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: