zoukankan      html  css  js  c++  java
  • Linux 编程题

    1. 产生一个进程树,父进程有2个子进程,这2个子进程分别又有2个子进程,每个进程休眠5秒后退出,并在退出前打印自己的进程id号。

     1 # include<stdio.h>
     2 # include<stdlib.h>
     3 # include<unistd.h>
     4 int main()
     5 {
     6     int reg,i; 
     7     for(i=0;i<2;i++)
     8         {
     9         reg=fork(); if(reg==0) break;
    10     }
    11     if(reg==0)
    12     {
    13         for(i=0;i<2;i++)
    14         {
    15             reg=fork();
    16             if(reg==0) break;
    17         }
    18     }
    19     sleep(5); 
    20     printf("this is %d process
    ", getpid());
    21 }        

    2.设计一个程序,使用read函数从源文件sc1.dat读取数据,再用write函数写入到目标文件,目标文件名都由键盘输入。另外,输出目标文件的内容。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<unistd.h>
     4 #include<sys/types.h>
     5 #include<sys/stat.h>
     6 #include<fcntl.h>
     7 #include<stdio.h>
     8 int main()
     9 {
    10     int fdsrc,fddes,nbytes;
    11     int flags=0_CREAT | 0_TRUNC | 0_WRONLY;
    12     int z;
    13     char buf[20],src[20],des[20];
    14     printf("请输入目标文件名:");
    15     scanf("%s",des);
    16     fdsrc=open("sc1.dat",0_RDONLY);    
    17     if(fdsrc<0)
    18     {
    19     exit(1);
    20     }
    21     fddes=open(des,flags,0644);
    22     if(fddes<0)
    23     {
    24     exit(1);
    25     }
    26     while((nbytes=read(fdsrc,buf,20))>0) //用read函数从源文件读数据
    27     {    
    28     z=write(fddes,buf,nbytes);//用write函数写入到目标文件
    29     if(z<0)
    30     {
    31      perror("写目标文件出错");
    32     }
    33     }
    34     close(fdsrc);
    35     close(fddes);
    36     printf("写入目标文件成功!");
    37 
    38     //输出目标文件内容
    39     int i;
    40     fddes=open(des,0_RDONLY);
    41     if(fddes<0)
    42     {
    43     exit(1);
    44     }
    45     while((nbytes=read(fddes,buf,20))>0)
    46     {
    47     for(i=0;i<sizeof(buf);i++)
    48     {
    49         printf("%c",buf[i]);
    50     }    
    51     }
    52     close(fddes);
    53     exit(0);
    54 }

    3.利用互斥锁pthread_mutex_t编写互斥访问临界资源的多线程程序。程序完成的功能要求:主函数初始化共享内存变量mv(初值为10),创建互斥锁,创建两个线程并等待两个线程执行完毕,之后输出mv的值并释放互斥锁;两个线程分别实现通过获取互斥锁的方式完成对内存变量mv自加10次和自减5次的功能。

     1 #include<stdlib.h>
     2 #include<stdio.h>
     3 #include<pthread.h>
     4 #include<errno.h>
     5 
     6 //共享内存变量mv
     7 int mv=10;
     8 //创建互斥锁
     9 pthread_mutex_t mutex;
    10 //线程服务程序
    11 static void pthread_funAdd(void);//做加法
    12 static void pthread_funSub(void);//做减法
    13 //主函数
    14 int main(void)
    15 {
    16     //线程标识符
    17     pthread_t pt_Add=0;    //加操作线程
    18     pthread_t pt_Sub=0;    //减操作线程
    19     int ret=0;
    20     //初始化互斥量
    21     pthread_mutex_init(&mutex,NULL);
    22     //分别创建线程Add、Sub
    23     ret=pthread_create(&pt_Add,        //线程标识符指针
    24         NULL,            //默认属性
    25         (void*)pthread_funAdd,    //运行加操作
    26         NULL);            //无参数
    27     if(ret != 0)
    28     {
    29     perror("pthread_Add_create");
    30     }
    31 
    32     ret=pthread_create(&pt_Sub,        //线程标识符指针
    33         NULL,            //默认属性
    34         (void*)pthread_funSub,    //运行减操作
    35         NULL);            //无参数
    36     if(ret != 0)
    37     {
    38     perror("pthread_Sub_create");
    39     }
    40     //等待线程Add、Sub结束
    41     pthread_join(pt_Add,NULL);
    42     pthread_join(pt_Sub,NULL);
    43     printf("main program exit!
    ");
    44     return 0;
    45 }
    46 
    47 //线程Add的服务程序
    48 static void pthread_funAdd(void)
    49 {
    50     int i=0;
    51     pthread_mutex_lock(&mutex);    //获取互斥锁
    52     sleep(1);
    53     printf("This is pthread_Add!
    ");
    54     //对共享变量自加10次
    55     for(i=0;i<10;i++)
    56     {
    57         mv++;
    58     }
    59     printf("pthread_Add 10 to num:%d
    ",mv);
    60     pthread_mutex_unlock(&mutex);    //释放互斥锁
    61     pthread_exit(NULL);
    62 }
    63 
    64 //线程Sub的服务程序
    65 static void pthread_funSub(void)
    66 {
    67     int i=0;
    68     pthread_mutex_lock(&mutex);    //获取互斥锁
    69     sleep(1);
    70     printf("This is pthread_Sub
    !
    ");
    71     //对共享变量自减5次
    72     for(i=0;i<5;i++)
    73     {
    74         mv--;
    75     }
    76     printf("pthread_Sub 5 to num:%d
    ",mv);
    77     pthread_mutex_unlock(&mutex);    //释放互斥锁
    78     pthread_exit(NULL);
    79 }

    4.编程实现随机产生10个100以内的整数,并输出其中能被7整除的数。并为其编写一个Makefile文件。(两种方法)

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<math.h>
     4 //主函数
     5 int main()
     6 {
     7     int i,j;
     8     for(i=0;i<10;i++)
     9     {
    10         j=1+(int)(100.0*rand()/(RAND_MAX+1.0));
    11         if(j%7==0)
    12         {
    13              printf("%d能被7整除
    ");
    14         }
    15     }
    16 }
    17  
    18 MakeFile文件:
    19 testrand:main.o
    20     gcc main.o -o testrand
    21 main.o:main.c
    22     gcc main.c -o main.o
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <time.h>
     4 
     5 int main()
     6 {
     7     int a[10],i;
     8     srand((unsigned int)time(NULL));
     9     for(i=0;i<10;i++)
    10     {
    11         a[i]=rand()%100+1;
    12         if(a[i]%7==0)
    13         printf("ok :%d
    ",a[i]);
    14     }
    15     for(i=0;i<10;i++)
    16     {
    17         printf("%d ",a[i]);
    18     }
    19     printf("
    ");
    20     return 0;
    21 }
  • 相关阅读:
    tensorflow2.0 GPU和CPU 时间对比
    第一次使用FileZilla Server
    PremiumSoft Navicat 15 for Oracle中文破解版安装教程
    Unmapped Spring configuration files found. Please configure Spring facet or use 'Create Default Context' to add one including all unmapped files.
    ng : 无法加载文件 D: odejs ode_global g.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
    angular
    Github上优秀的go项目
    win10---file explore 中remove quick access folder
    react--useEffect使用
    linux---cat 和 grep 的妙用
  • 原文地址:https://www.cnblogs.com/yyphappness/p/11171815.html
Copyright © 2011-2022 走看看