• 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 }
  • 相关阅读:
    挖掘经典:几乎被人遗忘的HTML七种用法
    TechEd 2010 微软技术大会 12月1日3日 北京国家会议中心
    PostSharp摘要
    实现Asp.net Forms身份验证的操作步骤详解
    DTO,DMO,DPO
    CodeSmith和PowerDesigner的安装和数据库创建二
    ASP.NET 2.0 Membership
    C# IEnumerable<T>、IEnumerator<T>、List<T>、ArrayList、[]数组各各的区别
    [转]ActiveWriter集成到VS.NET的NHibernate(ActiveRecord)对象可视化设计工具
    当一个程序员面临太多选择的时候
  • 原文地址:https://www.cnblogs.com/yyphappness/p/11171815.html
Copyright © 2020-2023  润新知