当前位置: 首页 > news >正文

自己的网站打不开百度seo快速见效方法

自己的网站打不开,百度seo快速见效方法,企业策划 企业网站建设 品牌设计,wordpress文章图片粘贴固定大小一、进程间通信#xff08;IPC#xff09; 1.1 进程间通信的引入 1 对于多个线程之间通信#xff0c;我们可以使用临界资源来完成#xff0c;通过一个线程任务对临界资源进行修改#xff0c;另一个线程也可以使用已经修改过的临界资源#xff0c;但是要注意使用…一、进程间通信IPC 1.1    进程间通信的引入 1    对于多个线程之间通信我们可以使用临界资源来完成通过一个线程任务对临界资源进行修改另一个线程也可以使用已经修改过的临界资源但是要注意使用同步互斥机制完成对临界资源的保护 2    多个进程之间能否使用全局变量来进行进程间通信 答不能多个进程之间的用户空间是相互独立的每个进程的全局变量是各个进程独立拥有的更改一个进程的全局变量另一个进程不会受到影响故而不能使用全局变量来完成通信 3    有同学说使用文件来完成进程间通信 答可行但是要求写进程先完成向文件中写入数据然后读进程才能读取数据必须要加入进程的同步操作 4    多个进程之间内核空间是共享的我们可以通过将数据放入到内核空间来完成两个进程之间信息的交流 5    进程间通信方式 1、内核提供的原始通信方式         无名管道         有名管道         信号 2、system V提供三种         消息队列         共享内存         信号量集   1.2    无名管道 1    顾名思义就是没有名字的管道文件所以只能适用于亲缘进程间的通信 2    原理通过内核在内存中创建出一个管道文件存放在内存空间并不在文件系统中真实存在。当打开该文件时会返回该文件的两个文件描述符分别对应读端和写端。可以通过读端从管道中读取数据从写端向管道中写入数据。当该文件的读写两端全部被关闭后该管道文件会在内存中消失 3    注意由于打开管道时返回的是文件描述符所以对该文件的操作只能使用文件IO 对于存入管道中的数据的读取是一次性的当数据读取结束后数据就不存在于管道文件中了 4    无名管道的API接口函数 #include unistd.h          int pipe(int pipefd[2]);        功能在通过内核在内存中创建一个无名管道并通过参数将该管道文件的两个文件描述符返回        参数接收文件描述符的数组pipefd[0]表示管道文件的读端pipefd[1]表示管道的写端        返回值成功返回0失败返回-1并置位错误码   #includemyhead.h   int main(int argc, const char *argv[]) {       //创建用于通信的管道文件并返回该文件对应的文件描述符     int pipefd[2] ;     if(pipe(pipefd)-1)     {         perror(pipe error);         return -1;     }         //创建父子进程     pid_t pid fork();     if(pid 0)     {         perror(fork error);         return -1;     }else if(pid   0)     {         //子进程         close(pipefd[1]);          //关闭写端              //接受父进程发来的消息         char rbuf[128] ;           while(1)         {             bzero(rbuf, sizeof(rbuf));               //从管道中读取数据             read(pipefd[0], rbuf, sizeof(rbuf));               if(strcmp(rbuf, quit)0)             {                 break;             }               //输出数据             printf(收到父进程的来信%s\n, rbuf);         }           //关闭读段         close(pipefd[0]);             //退出进程         exit(EXIT_SUCCESS);     }       //父进程     char sbuf[128] ;      //关闭读端     close(pipefd[0]);     while(1)     {                   usleep(10);         printf(父进程中输入);         fgets(sbuf, sizeof(sbuf), stdin);          //从终端获取字符串         sbuf[strlen(sbuf)-1] 0;           //发送给子进程,将数据通过写端写入管道 pipefd[1]         write(pipefd[1], sbuf, strlen(sbuf));           //判断终端获取的数据         if(strcmp(sbuf, quit) 0)         {             break;         }           //关闭写端         close(pipefd[1]);     }              //回收子进程资源     wait(NULL);       return 0; }   5    总结管道通信的特点 1、管道通信是半双工的通信方式     单工任意时刻只能A向B发送消息B不能向A发送消息     半双工同一时刻只能A向B发送消息或者B向A发消息     全双工任意时刻AB可以互相发送消息 2、无名管道只适用于亲缘进程间通信 3、无名管道也能完成自己跟自己的通信 4、无名管道文件的大小64KB 6    管道的读写特点笔试面试 1、当管道读端存在时写管道有多少写多少直到写满64K为止 2、当管道读端不存在时写管道写入数据时会出现管道破裂此时内核空间会向用户空间发送一个SIGPIPE信号 3、当写端存在时读管道有多少读多少没有数据会在read处阻塞 4、当写端不存在时读管道有多少读多少没有数据也不会在read处阻塞   #includemyhead.h   int main(int argc, const char *argv[]) {     //创建一个五名管道     int fds[2];       if(pipe(fds) -1)     {         perror(pipe error);         return -1;     }       //向管道中写入数据     char buf A;     int count 0;       //记录写入的大小     while(1)     {         write(fds[1], buf, 1);         count ;         printf(count %d\n, count);         //关闭读端         close(fds[0]);     }         while(1);       return 0; }     #includemyhead.h   int main(int argc, const char *argv[]) {       //创建用于通信的管道文件并返回该文件对应的文件描述符     int pipefd[2] ;     if(pipe(pipefd)-1)     {         perror(pipe error);         return -1;     }         //创建父子进程     pid_t pid fork();     if(pid 0)     {         perror(fork error);         return -1;     }else if(pid   0)     {         //子进程         close(pipefd[1]);          //关闭写端              //接受父进程发来的消息         char rbuf[128] ;           while(1)         {             bzero(rbuf, sizeof(rbuf));               //从管道中读取数据             read(pipefd[0], rbuf, sizeof(rbuf));               if(strcmp(rbuf, quit)0)             {                 break;             }               //输出数据             printf(收到父进程的来信%s\n, rbuf);         }           //关闭读段         close(pipefd[0]);             //退出进程         exit(EXIT_SUCCESS);     }       //父进程     char sbuf[128] ;     //关闭读端     close(pipefd[0]);     while(1)     {             usleep(10);         printf(父进程中输入);         fgets(sbuf, sizeof(sbuf), stdin);          //从终端获取字符串         sbuf[strlen(sbuf)-1] 0;           //发送给子进程,将数据通过写端写入管道 pipefd[1]         write(pipefd[1], sbuf, strlen(sbuf));           //判断终端获取的数据         if(strcmp(sbuf, quit) 0)         {             break;         }           //关闭写端         close(pipefd[1]);         }       //关闭写端     close(pipefd[1]);       //回收子进程资源     wait(NULL);       return 0; }     1.3    有名管道 1    顾名思义就是有名字的管道文件会在文件系统中创建一个有名字的管道文件 2    可以用于亲缘进程间的通信也可以用于非亲缘进程间的通信 3    有名管道的API函数 #include sys/types.h        #include sys/stat.h          int mkfifo(const char *pathname, mode_t mode);     功能在文件系统中创建一个有名管道但是并没有打开该文件     参数1有名管道的名称     参数2管道文件的权限     返回值成功返回0失败返回-1并置位错误码 create.c #includemyhead.h   int main(int argc, const char *argv[]) {     //创建一个有名管道文件     if(mkfifo(./linux, 0664)-1)     {         perror(mkfifo error);         return -1;     }       getchar();       system(rm linux);          return 0; }   snd.c #includemyhead.h   int main(int argc, const char *argv[]) {     //以写的形式打开管道文件     int wfd open(./linux, O_WRONLY);     if(wfd -1)     {         perror(open error);         return -1;     }     printf(管道文件已经打开\n);       //发送数据     char wbuf[128] ;     while(1)     {         printf(请输入);         fgets(wbuf, sizeof(wbuf), stdin);         wbuf[strlen(wbuf)-1] 0;           //将数据发送给到管道中         write(wfd, wbuf, strlen(wbuf));           //判断数据         if(strcmp(wbuf, quit) 0)         {             break;         }     }       //关闭文件描述符     close(wfd);            return 0; }   recv.c #includemyhead.h   int main(int argc, const char *argv[]) {     //以读的形式打开文件     int rfd open(./linux, O_RDONLY);     if(rfd -1)     {         perror(open error);         return -1;     }     printf(管道文件读端打开\n);       //定义接受容器     char rbuf[128] ;     while(1)     {         bzero(rbuf, sizeof(rbuf));         //读取数据         read(rfd, rbuf, sizeof(rbuf));         if(strcmp(rbuf, quit) 0)         {             break;         }         printf(收到消息为%s\n, rbuf);     }       //关闭文件描述符     close(rfd);          return 0; }     1.4    信号通信 1    信号通信原理图两个异步通信的进程之间通过发送相关信号完成任务间的通信 2    信号是linux中软件模拟硬件的“中断”的一种方式。信号是软件部分的名词中断是硬件部分的名词 3    能够发送的信号可以通过指令kill -l进行查看 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP  6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1 11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM 16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP 21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ 26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR 31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN1    36) SIGRTMIN2    37) SIGRTMIN3 38) SIGRTMIN4    39) SIGRTMIN5    40) SIGRTMIN6    41) SIGRTMIN7    42) SIGRTMIN8 43) SIGRTMIN9    44) SIGRTMIN10    45) SIGRTMIN11    46) SIGRTMIN12    47) SIGRTMIN13 48) SIGRTMIN14    49) SIGRTMIN15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12 53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7 58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2 63) SIGRTMAX-1    64) SIGRTMAX     4    对于信号的处理方式有三种默认、捕获、忽略 有两个信号既不能被捕获也不能被忽略SIGKILL、SIGSTOP 5    上面的信号触发条件以及默认处理方式可以通过指令 man 7 signal进行查看 Signal     Value     Action   Comment        ──────────────────────────────────────────────────────────────────────        SIGHUP        1       Term    Hangup detected on controlling terminal                                      or death of controlling process        SIGINT        2       Term    Interrupt from keyboard        SIGQUIT       3       Core    Quit from keyboard        SIGILL        4       Core    Illegal Instruction        SIGABRT       6       Core    Abort signal from abort(3)        SIGFPE        8       Core    Floating-point exception        SIGKILL       9       Term    Kill signal        SIGSEGV      11       Core    Invalid memory reference        SIGPIPE      13       Term    Broken pipe: write to pipe with no                                      readers; see pipe(7)        SIGALRM      14       Term    Timer signal from alarm(2)        SIGTERM      15       Term    Termination signal        SIGUSR1   30,10,16    Term    User-defined signal 1        SIGUSR2   31,12,17    Term    User-defined signal 2        SIGCHLD   20,17,18    Ign     Child stopped or terminated        SIGCONT   19,18,25    Cont    Continue if stopped        SIGSTOP   17,19,23    Stop    Stop process        SIGTSTP   18,20,24    Stop    Stop typed at terminal        SIGTTIN   21,21,26    Stop    Terminal input for background process        SIGTTOU   22,22,27    Stop    Terminal output for background process   6    信号的发送者可以是内核、其他进程、用户自己 7    将信号与信号处理方式连接函数 #include signal.h          typedef void (*sighandler_t)(int);          sighandler_t signal(int signum, sighandler_t handler);        功能将信号与信号处理函数绑定到一起        参数1要绑定的信号        参数2信号处理函数                SIG_IGN表示忽略信号                SIG_DFL表示默认处理                填自定义函数的入口地址         返回值成功返回处理方式的起始地址失败返回 SIG_ERR     #includemyhead.h //自定义处理信号的函数 void handler(int signo) {     //判断传过来的信号是哪个     if(signo SIGINT)     {         printf(当前进程收到了ctrl c但是就是关不掉\n);     }       //判断是否为SIGKILL到位     if(signo SIGKILL)     {         printf(捕获了SIGKILL\n);     }      }     /**************************主程序*******************/ int main(int argc, const char *argv[]) {       //将2号信号与对应的信号处理函数进行绑定     /*尝试忽略2号信号     if(signal(2, SIG_IGN) SIG_ERR)     {         perror(signal error);         return -1;     }     */       //尝试捕获2号信号     if(signal(2, handler) SIG_ERR)     {         perror(signal error);         return -1;     }       /*尝试忽略SIGKILL信号报错参数不合法         if(signal(SIGKILL, handler) SIG_ERR)     {         perror(signal error);         return -1;     }*/       /*尝试捕获SIGKILL信号报错参数不合法         if(signal(SIGKILL, handler) SIG_ERR)     {         perror(signal error);         return -1;     }     */       /*尝试默认处理:报错参数不合法     if(signal(SIGKILL, SIG_DFL) SIG_ERR)     {         perror(signal error);         return -1;     }*/         while(1)     {         printf(啦啦啦啦我是卖报的小行家\n);         sleep(1);     }            return 0; }     1.5    特殊的信号处理 1    SIGCHLD信号以非阻塞的形式回收僵尸进程 #includemyhead.h   //自定义信号处理函数 void handler(int signo) {     if(signo SIGCHLD)     {         while(1)         {             //判断是否将僵尸进程全部回收了             if(waitpid(-1, NULL, WNOHANG) 0)             {                 break;             }         }     } }   /******************主程序**********************/ int main(int argc, const char *argv[]) {     //将SIGCHLD信号与信号处理函数绑定到一起     if(signal(SIGCHLD, handler) SIG_ERR)     {         perror(signal error);         return -1;     }         for(int i0; i10; i)     {         if(fork() 0)         {             exit(EXIT_SUCCESS);         }          }       while(1);       /*     for(;;)     {         printf(我是小妖怪逍遥游自在\n);         sleep(1);     }*/       return 0; }   2    SIGALRM定时器信号 程序允许启动一个定时器当所定的时间到位后会发送一个SIGALRM信号我们可以将该信号绑定到对应的信号处理函数中从而导致给定时间后处理自定义函数。该信号需要使用一个函数来发送超时信号alarm闹钟函数 #include unistd.h          unsigned alarm(unsigned seconds);     功能给进程设置一个定时器以秒为单位当定时器到位后后向该进程发送一个SIGALRM的信号     参数秒数如果参数设置成0表示删除定时器     返回值0:表示返回的上一个定时器剩余的秒数并且重置上一个定时器             0表示之前没有设置定时器   #includemyhead.h   //定义信号处理函数 void handler(int signo) {     if(signo SIGALRM)     {         printf(阎王叫你三更死怎可留人到五更\n);         sleep(2);         exit(EXIT_SUCCESS);     } }     /********************主程序******************/ int main(int argc, const char *argv[]) {       //将SIGALRM信号与信号处理函数绑定     if(signal(SIGALRM, handler) SIG_ERR)     {         perror(signal error);         return -1;     }         printf(%d\n, alarm(10));          //0       sleep(5);         printf(%d\n, alarm(10));          //5         int count 0;     while(1)     {         printf(能活一秒是一秒\n);         sleep(1);         /*         count;         if(count 3)         {             alarm(0);           //删除定时器         }         */     }       return 0; }   使用SIGALRM模拟斗地主出牌 #includemyhead.h   //定义信号处理函数 void handler(int signo) {     if(signo SIGALRM)     {         printf(系统已经自动帮您出了一张牌\n);         alarm(5);     } }     /*******************主程序**********************/ int main(int argc, const char *argv[]) {       //将信号与信号处理函数绑定     if(signal(SIGALRM, handler) SIG_ERR)     {         perror(signal error);         return -1;     }         char ch;        //要出的牌       while(1)     {         //启动一个定时器         alarm(5);           printf(请出牌);         scanf(%c, ch);         getchar();           printf(您出的牌为%c\n, ch);     }       return 0; }                         1    使用有名管道实现一个进程用于给另一个进程发消息另一个进程收到消息后展示到终端上并且将消息保存到文件上一份 xs.c #includemyhead.h   int main(int argc, const char *argv[]) {     //创建一个有名管道文件     if(mkfifo(./linux, 0664)-1)     {         perror(mkfifo error);         return -1;     }       getchar();      //删除管道文件     system(rm linux);     return 0; }  cb.c #includemyhead.h   int main(int argc, const char *argv[]) {     //以写的形式打开管道文件     int wfd open(./linux, O_WRONLY);     if(wfd -1)     {         perror(open error);         return -1;     }     printf(管道文件已经打开\n);       //发送数据     char wbuf[128] ;     while(1)     {         printf(请输入);         fgets(wbuf, sizeof(wbuf), stdin);         wbuf[strlen(wbuf)-1] \0;           //将数据发送给到管道中         write(wfd, wbuf, strlen(wbuf));           //判断数据         if(strcmp(wbuf, quit) 0)         {             break;         }     }       //关闭文件描述符     close(wfd);            return 0; } cd.c #includemyhead.h   int main(int argc, const char *argv[]) {     //以读的形式打开文件     int rfd open(./linux, O_RDONLY);     if(rfd -1)     {         perror(open error);         return -1;     }     printf(管道文件读端打开\n);      int tid open(./1.txt, O_RDWR);     if(rfd -1)     {         perror(open error);         return -1;     }     //定义接受容器     char rbuf[128] ;     while(1)     {         bzero(rbuf, sizeof(rbuf));         //读取数据         read(rfd, rbuf, sizeof(rbuf));         if(strcmp(rbuf, quit) 0)         {             break;         }         printf(收到消息为%s\n, rbuf);         write(tid,rbuf,sizeof(rbuf));     }       //关闭文件描述符     close(rfd);     close(tid);     return 0; }   2    使用有名管道实现两个进程间相互通信 day1.c #include myhead.h int main(int argc, const char *argv[]) {     //创建一个有名管道文件     if (mkfifo(./linux, 0664) -1)     {         perror(mkfifo error);         return -1;     }         //创建一个有名管道文件     if (mkfifo(./text, 0664) -1)     {         perror(mkfifo error);         return -1;     } getchar();     //删除管道文件     system(rm linux);     system(rm text);     return 0; } dday1.c #include myhead.h int main(int argc, const char *argv[]) {     //以写的形式打开管道文件     int wfd open(./linux, O_WRONLY);     if (wfd -1)     {         perror(open error);         return -1;     }     printf(管道文件已经打开\n);     int rid open(./text, O_RDONLY);     if (rid -1)     {         perror(open error);         return -1;     }     printf(管道文件已经打开\n);     int rp -1;     if ((rp fork()) -1)     {         perror(fork error\n);     }     if (rp 0)     {         //发送数据         char wbuf[128] ;         while (1)         {             printf(请输入\n);             fgets(wbuf, sizeof(wbuf), stdin);             wbuf[strlen(wbuf) - 1] 0; //将数据发送给到管道中             write(wfd, wbuf, strlen(wbuf)); //判断数据             if (strcmp(wbuf, quit) 0)             {                 break;             }             //关闭文件描述符         }         close(wfd);         }     else     {         char sv[128] ;         while (1)         {             bzero(sv, sizeof(sv));             read(rid, sv, sizeof(sv));             if (strcmp(sv, quit) 0)             {                 break;             }             printf(接收到的数据为%s\n, sv);         } close(rid);   exit(0);     } wait(NULL); return 0; } day2.c #include myhead.h int main(int argc, const char *argv[]) {     //以写的形式打开管道文件     int wfd open(./linux, O_RDONLY);     if (wfd -1)     {         perror(open error);         return -1;     }     printf(管道文件已经打开\n);     int rid open(./text, O_WRONLY);     if (rid -1)     {         perror(open error);         return -1;     }     printf(管道文件已经打开\n);     int rp -1;     if ((rp fork()) -1)     {         perror(fork error\n);     }     if (rp 0)     {         char sv[128] ;         while (1)         {             bzero(sv, sizeof(sv));             read(wfd, sv, sizeof(sv));             if (strcmp(sv, quit) 0)             {                 break;             }             printf(接受到的数据为%s\n, sv);         }            close(wfd);     }     else     {         //发送数据         char wbuf[128] ;         while (1)         {             printf(请输入\n);             fgets(wbuf, sizeof(wbuf), stdin);             wbuf[strlen(wbuf) - 1] 0; //将数据发送给到管道中             write(rid, wbuf, strlen(wbuf)); //判断数据             if (strcmp(wbuf, quit) 0)             {                 break;             }             //关闭文件描述符         } close(rid); exit(0);     } wait(NULL); return 0; }
http://www.hkea.cn/news/14485151/

相关文章:

  • 张家港网站建设培训官网查询在哪里查
  • 门户网站部署方案淮南网络宾馆
  • 关于网站开发网页上传和网站发布网页制作官方网站
  • 企业seo网站推广seo规范培训
  • 免费手机h5模板网站模板长春网站制作教程
  • 石家庄手机模板建站建e室内设计网 周婷
  • 网站做优化得话从哪里优化做外国网站百度搜到
  • 无锡装饰网站建设排名做旅游的网站的要素
  • 北京网站设计制作关键词优化单页网站排名没有
  • 小企业网站建设查询凡科建设的网站如何
  • 大连城市建设网站上海注册公司流程及费用
  • 网站维护一般都是维护什么网站的类型有哪些
  • 西安有哪些网站建设外包公司机构ui设计培训
  • 建设银行网站登陆不了网站内部资源推广方法
  • 北京市教学名师奖建设项目网站建设哪里看额度
  • 郑州企业建站设计2021年11月最新新闻热点事件
  • PHP套模板做网站焦作住房和城乡建设厅网站
  • 怎么免费建商城网站吗淄博网站建设 熊掌号
  • 装修网站官网地区汽车修理网站建设
  • 做网站竞价怎么找客户阿里巴巴网站推广方式
  • 大连建设厅网站门户网站建设存在的问题和差距
  • 厦门专业网站建设建站购物网站app推广方案
  • 做流量网站吗南昌seo站外优化
  • 企业网站开发 宁波网络公司dw网站首页制作
  • 菜鸟制作个人网站网页实例企业年金如何提取
  • 网站留言效果怎么做长沙网站服务器
  • 郑州网站制作需要多少钱企业网络营销推广
  • 网站设计行业吃香么做游戏的php网站有哪些
  • 常州城乡和住房建设厅网站怎么注销建设银行网站用户
  • 个人网站 费用做网站的得花多少钱