⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw.c

📁 .添加系统调用.采用编译内核的方法
💻 C
字号:
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
#include <curses.h>
#include <stdio.h>
#define MAX_CHILD 3          /* 本主程序产生3个子进程 */

int draw1(void) {                /* draw1()是子进程1调用的画图的函数,draw2(),draw3()功能类似*/
 int x_loop;
 int y_loop;                    /* 循环体中用到的坐标,标识光标在新窗口的位置 */

 WINDOW *new_window_ptr1;   /* 新建窗口的指针 */

 char zhzhxiao[8]={'z','h','z','h','x','i','a','o'}; 
 int count1;                    

 sleep(1);
 new_window_ptr1=newwin(5,30,1,0); /* 产生1个新窗口,位置在标准终端(显示器)0,1的地方,大小为10,20 */
 box(new_window_ptr1,'|','-');     /* 给新窗口加边框 */

 mvwprintw(new_window_ptr1,2,2,"%s","Author:"); /* 移动光标的位置,在新窗口的2,2处输出字符串 */
 wrefresh(new_window_ptr1);
 refresh(); /* 每次在终端上画出新的内容都需要刷新窗口才能正确显示 */
 sleep(2);

 for(count1=0;count1<8;count1++){
 mvwaddch(new_window_ptr1,3,2+count1,zhzhxiao[count1]); /* 使用mvwadch()函数在新窗口下输出数组中的内容 */
 wrefresh(new_window_ptr1);
 refresh();
 sleep(1);                    
 }
exit(0);
}


int draw2(void) {

 int x_loop;
 int y_loop;

 WINDOW *new_window_ptr2;
 char class[6]={'C','S','0','2','0','1'}; 
 int count2;

 sleep(1);
 
 
 new_window_ptr2=newwin(5,30,7,0);
 box(new_window_ptr2,'|','-');

 mvwprintw(new_window_ptr2,2,2,"%s","Class:");
 wrefresh(new_window_ptr2);
 refresh(); 
 sleep(2);

 for(count2=0;count2<6;count2++){
 mvwaddch(new_window_ptr2,3,2+count2,class[count2]);
 wrefresh(new_window_ptr2);
 refresh();
 sleep(1);
 }
exit(0);

}


int draw3(void) {

 int x_loop;
 int y_loop;

 WINDOW *new_window_ptr3;
 char xuehao[12]={'0','1','2','0','0','2','0','1','3','3','2','4'}; 
 int count3;

 sleep(1);
 
 
 new_window_ptr3=newwin(5,30,14,0);
 box(new_window_ptr3,'|','-');

 mvwprintw(new_window_ptr3,2,2,"%s","xuehao:");
 wrefresh(new_window_ptr3);
 refresh();
 sleep(2);

 for(count3=0;count3<12;count3++){
 mvwaddch(new_window_ptr3,3,2+count3,xuehao[count3]);
 wrefresh(new_window_ptr3);
 refresh();
 sleep(1);
 }
exit(0);

}


int main(void)
{
  pid_t pid;
  pid_t ids[MAX_CHILD];       /* 此数组将程序产生的3个子进程在系统中的标识ID存放起来 */
  int  n;

 initscr();                     
 refresh();                     /* 初始化屏幕 */ 

  n = 0;
  do {
    pid = fork();               /* 每次fork()都能产生新的子进程 */
    n++;

    switch (pid) {
      case -1:                /* 对应fork()失败的情形 */
        exit(-1);              
        break;
      case  0: if(n==1) draw1(); 
              if(n==2) draw2();
              if(n==3) draw3(); /* 运行到case 0的都是子进程,他们分别调用3个函数来画图 */
         break;
      default:  ids[n-1]=pid;    /* 运行到这里的是父进程,此时pid为他产生的子进程在系统内的ID */
         break;
       }

     }while (pid!=0&&n<MAX_CHILD);    /* 父进程会循环fork()三次,产生3个子进程 */

     for(n=0;n<MAX_CHILD;n++)
     wait(ids[n]);                      /* 父进程作为守护进程,等待3个子进程都死亡自己才退出 */
     sleep(10);
                             
     touchwin(stdscr);
     refresh();
     endwin();
     exit(0);                         /* 父进程恢复原屏幕并退出 */

   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -