学习 Linux高级编程07_B

来源:互联网 发布:入室盗窃案件数据 编辑:程序博客网 时间:2024/06/05 16:55

 

Sighandle.c

#include<stdio.h>

#include<signal.h>

void handle(int s)

{

         printf("hello  start\n");

         sleep(10);

         printf("hello  end\n");

}

main()

{

         signal(SIGINT,  handle);

         while(1);

}

 

Sigaction.c

#include<stdio.h>

#include<signal.h>

#include<unist.h>

 

void handle(int s)

{

         printf("OOOK!\n");

         sleep(5);

         printf("KKKOn");

}

 

main()

{

         struct  sigaction act = {0};

        

         act.sa_handler  = handle;

         sigemptyset(&act.sa_mask);

         sigaddset(&act.sa_mask,  SIGINT);

         act.sa_flags  = 0;

         sigaction(SIGUSER1,&act,  0);

         while(1);

}

#include<stdio.h>

#include<signal.h>

#include<unist.h>

 

main()

{

         union  sigval val;

         val.sival_int  = 9999;

         sigqueue(3382,  SIGUSR1, val);

}       

#include<stdio.h>

#include<signal.h>

#include<unist.h>

 

void handle(int s, siginfo_t *info, void  *d)

{

         printf("OOOK!  %d\n" info->si_int);

        

         sleep(5);

         printf("KKKOn");

}

 

main()

{

         struct  sigaction act = {0};

        

         //act.sa_handler  = handle;

         act.sa_sigaction  = handle;

         sigemptyset(&act.sa_mask);

         sigaddset(&act.sa_mask,  SIGINT);

         act.sa_flags  = SA_SIGINFO;

         sigaction(SIGUSER1,&act,  0);

         while(1);

}

 

 

 

 

procA.c

#include<stdio.h>

#include<fcntl.h>

#include<sys/mman.h>

main()

{

         int  *p;

         int  fd;

         int  i;

         fd  = open("tmp.txt", O_RDWR| O_CREATE, 0666);

         ftruncate(fd,  4); //文件4个字节

         p  = mmap(0,

                            4, 

                            PROT_READ|PROT_WRITE,

                            MAP_SHARED,  fd, 0);

         i  = 0;

         while(1)

         {

                   sleep(1);

                   *p  = i;

                   i  ++;

         }

         close(fd);

}

procB.c

#include<stdio.h>

#include<fcntl.h>

#include<sys/mman.h>

main()

{

         int  *p;

         int  fd;

 

         fd  = open("tmp.txt", O_RDWR); //0666文件权限

         ftruncate(fd,  4); //文件4个字节

         p  = mmap(0,

                            4, 

                            PROT_READ|PROT_WRITE,

                            MAP_SHARED,  fd, 0);

 

         while(1)

         {

                   sleep(1);

                   printf("%d\n",  *p);

         }

         close(fd);

}

 

 

Mkfifo

 

fifoA.c

#include<stdio.h>

#include<fcntl.h>

#include<unistd.h>

#include<sys/stat.h>

main()

{

         int  fd;//文件描述符

         int  i;

         mkfifo("my.pipe",0666)//1建立管道文件名,权限

         fd  = open("my.pipe", O_RDWR);//2打开管道

         i  = 0;

         while(1)

         {

                   //3每隔1秒写数据

                   sleep(1);

                   write(fd,  &i, 4);

                   i  ++;

         }

         close(fd);  //4关闭管道

         unlink("my.pipe");  //5删除管道

}

fifoB.c

#include<stdio.h>

#include<fcntl.h>

#include<unistd.h>

#include<sys/stat.h>

main()

{

         int  fd;//文件描述符

         int  i;

         fd  = open("my.pipe", O_RDWR);//2打开管道

         while(1)

         {

                   read(fd,  &i, 4);

                   printf("%d\n",  i);

         }

         close(fd);  //4关闭管道

}

#include<stdio.h>

#include<fcntl.h>

#include<unistd.h>

#include<sys/stat.h>

#include<signal.h>

#incldue<stdlib.h> //exit()

int fd;

int i;

 

void end(int s)

{

         close(fd);

         unlink("my.pipe");

         exit(-1);

}

 

main()

{

         signal(SIGINT,  end);

         mkfifo("my.pipe",0666)//1建立管道文件名,权限

         fd  = open("my.pipe", O_RDWR);//2打开管道

         i  = 0;

         while(1)

         {

                   //3每隔1秒写数据

                   sleep(1);

                   write(fd,  &i, 4);

                   i  ++;

         }

}

#include<stdio.h>

#include<fcntl.h>

#include<unistd.h>

#include<sys/stat.h>

#include<signal.h>

#include<stdlib.h>

 

int fd;//文件描述符

void end(int s)

{

         close(fd);  //4关闭管道

         exit(-1);

}

 

main()

{

         int  i;

         signal(SIGINT,  end);

         fd  = open("my.pipe", O_RDWR);//2打开管道

         while(1)

         {

                   read(fd,  &i, 4);

                   printf("%d\n",  i);

         }

}

 

Pipe1.c

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

int main()

{

         int  fd[2];

         int  r;

         r  = pipe(fd);

         printf("%d\n",  getpid());

         while(1);

}

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

int main()

{

         int  fd[2];

         int  r;

         char  buf[20];

         printf("%d\n",  getpid());

         r  = pipe(fd);

         write(fd[1],  "hello", 5);

         wirte(fd[1],  "word", 5);

         r  = read(fd[0], buf, 20);

         buf[r]  = 0;

         printf("%s\n",  buf);

         wirte(fd[1],  "louis", 5);

         r  = read(fd[0], buf, 20);

         buf[r]  = 0;

         printf("%s\n",  buf);

         while(1);

}

 

Demo5.c

#include<unistd.h>

#include<stdio.h>

 

main()

{

         int  fd[2];

         pipe(fd);

         if(fork())

         {

                   //parent

                   close(fd[0]);  //读关闭,只负责写

                   while(1)

                   {

                            write(fd[1],  "hello", 5);

                            sleep(1);

                   }

         }

         else

         {

                   //child

                   char  buf[20];

                   int  r;

                   close(fd[1]);  //写关闭,只负责读

                   while(1)

                   {

                            r=  read(fd[0], buf, 20);

                            buf[r]  = 0;

                            printf("%s\n",  buf);

                   }

                  

         }

}

 

Demo6.c

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

#include<fcntl.h>

#include<stdlib.h>

#include<string.h>

 

main()

{

         int  a, b;

         int  id=1;

         while(1)

         {

                   if(id  == 1)

                   {

                            a  = 2;

                            b  = 5000;

                   }

                   if(id  == 2)

                   {

                            a  = 5001;

                            b  = 10000;

                   }

                   if(fork())

                   {

                            //父进程

                            id  ++; //记录创建几个

                            if(id  > 2)

                            {

                                     break;

                            }

                            continue;

                   }

                   else

                   {

                            //子进程

                            while(1)

                            {

                                     sleep(1);

                                     printf("pid=  %d : a = %d, b = %d\n", getpid(), a, b);

                            }

                            exit(0);

                   }

         }

         while(1)

         {

                   //打开文件,准备存储

                   printf("parent  save\n");

                   sleep(1);

         }

}

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

#include<fcntl.h>

#include<stdlib.h>

#include<string.h>

#include<sched.h>

int isprimer(int ta)

{

         int  i = 2;

         for(;  i < ta; i ++)

         {

                   if(ta  % i == 0)

                   {

                            return  0;

                   }

         }

         return  1;

}

 

main()

{

         int  a, b;

         int  id=1;

         while(1)

         {

                   if(id  == 1)

                   {

                            a  = 2;

                            b  = 5000;

                   }

                   if(id  == 2)

                   {

                            a  = 5001;

                            b  = 10000;

                   }

                   if(fork())

                   {

                            //父进程

                            id  ++; //记录创建几个

                            if(id  > 2)

                            {

                                     break;

                            }

                            continue;

                   }

                   else

                   {

                            //子进程

                            int  i;

                            for(i  = a; i <= b; i ++)

                            {

                                     if(isprimer(i))

                                     {

                                               printf("%d:  %d\n", getpid(), i);

                                     }

                                     usleep(100);

                            }

                            printf("%d  exit!\n", getpid());

                            exit(0);

                   }

         }

         while(1)

         {

                   //打开文件,准备存储

                   printf("parent  save\n");

                   sched_yield();  //sched.h

         }

}

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

#include<fcntl.h>

#include<stdlib.h>

#include<string.h>

 

int idx = 0;

void handle(int s)

{

         int  status;

         if(s  == SIGCHLD)

         {

                   wait(&status);

                   printf("child  exit!\n");

                   idx  ++;

                   if(idx  == 2)

                   {

                            exit(-1);

                   }

         }

}

 

int isprimer(int ta)

{

         int  i = 2;

         for(;  i < ta; i ++)

         {

                   if(ta  % i == 0)

                   {

                            return  0;

                   }

         }

         return  1;

}

 

main()

{

         int  a, b;

         int  id=1;

         int  fd[2];

         signal(SIGCHLD,  handle);

         pipe(fd);

         while(1)

         {

                   if(id  == 1)

                   {

                            a  = 2;

                            b  = 30;

                   }

                   if(id  == 2)

                   {

                            a  = 31;

                            b  = 60;

                   }

                   if(fork())

                   {

                            //父进程

                            id  ++; //记录创建几个

                            if(id  > 2)

                            {

                                     break;

                            }

                            continue;

                   }

                   else

                   {

                            //子进程

                            int  i;

                            close(fd[0]);

                            for(i  = a; i <= b; i ++)

                            {

                                     if(isprimer(i))

                                     {

                                               write(fd[1],  &i, sizeof(int));

                                     }

                                     usleep(100);

                            }

                            printf("%d  exit!\n", getpid());

                            exit(0);

                   }

         }

         while(1)

         {

                   int  re;

                  

                   //打开文件,准备存储

                   close(fd[1]);

                   read(fd[0],  &re, sizeof(int));

                   printf("%d\n",  re);

         }

}

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

#include<fcntl.h>

#include<stdlib.h>

#include<string.h>

 

int idx = 0;

int fddata = 0;

void handle(int s)

{

         int  status;

         if(s  == SIGCHLD)

         {

                   wait(&status);

                   printf("child  exit!\n");

                   idx  ++;

                   if(idx  == 2)

                   {

                            close(fddata);

                            printf("save  over!!!\n");

                            exit(-1);

                   }

         }

}

 

int isprimer(int ta)

{

         int  i = 2;

         for(;  i < ta; i ++)

         {

                   if(ta  % i == 0)

                   {

                            return  0;

                   }

         }

         return  1;

}

 

main()

{

         int  a, b;

         int  id=1;

         int  fd[2];

         signal(SIGCHLD,  handle);

         pipe(fd);

         while(1)

         {

                   if(id  == 1)

                   {

                            a  = 2;

                            b  = 30;

                   }

                   if(id  == 2)

                   {

                            a  = 31;

                            b  = 60;

                   }

                   if(fork())

                   {

                            //父进程

                            id  ++; //记录创建几个

                            if(id  > 2)

                            {

                                     break;

                            }

                            continue;

                   }

                   else

                   {

                            //子进程

                            int  i;

                            close(fd[0]);

                            for(i  = a; i <= b; i ++)

                            {

                                     if(isprimer(i))

                                     {

                                               write(fd[1],  &i, sizeof(int));

                                     }

                                     usleep(100);

                            }

                            printf("%d  exit!\n", getpid());

                            exit(0);

                   }

         }

         int  re;

         char  buf[20];

         //打开文件,准备存储

         close(fd[1]);

         fddata  = open("result.txt",

                                     O_RDWR  | O_CREAT, 0666);

         while(1)

         {

                   read(fd[0],  &re, sizeof(int));

                   sprintf(buf,  "%d\n", re);

                   write(fddata,  buf, strlen(buf));

         }

         printf("parent  exit\n");

}

 

 

原创粉丝点击