网络程序设计实验

1、编程实现创建2个新进程,每个新进程负责打印出:

(1)“Hello!My father is+父进程号”

(2)“I am +子进程号”

(3)50以内的质数

2、编程实现创建3个新线程,每个新线程要求从主线程获得参数,并负责打印出:

(1)“Hello!My father is+父进程号”

(2)“I am +子进程号”

(3)判断参数是否为素数


代码如下

多进程

#include <stdio.h>
#include <unistd.h>
#include <math.h>
int main(){
        int t;

    for(t=0;t<=1;t++){
        int ret=fork();//创建新进程
       sleep(3) ;
        if(ret==0){
      //输出父进程号,子进程号        
    printf("Hello! My father is %d, I am %d  \n",getppid(),getpid());

//输出50以内质数
    int i,n;
    for(i=2;i<=50;i++)以内
    {
    for(n=2;n<=(int)sqrt(i);n++)
    if(i%n==0)break;
    if(n==(int)sqrt(i)+1)
    printf("%d  ",i); }
       printf("\n");
    exit(1);
        }
    if(ret==-1){
         perror("fork error!");
        }
        } 
     for(t=0;t<=1;t++){wait(NULL);
    }
   
    return 0;
}

 

多线程代码

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/syscall.h>
void *thread(void * arg)
{   
    int pid,n;pid=(int)arg;
    printf("hello!,my father is %d!I am %lu, ",getpid(),pthread_self());  //输出进程号,子进程号

//syscall(SYS_gettid)
    for(n=2;n<pid;n++)    //判断参数是否为素数
    {
        if(pid%n==0){break;}
    }
    if(n==pid){
    printf("%d is shushu\n",pid);}
    else {
    printf("%d is not shushu\n",pid);}
    pthread_exit(0);   //释放后资源
}
      
int main()
{
    pthread_t tid[3];int n=13;int i;
    for(i=0;i<3;i++)
    {
    int ret=pthread_create(&tid[i],NULL,thread,(void*) n);//创建线程
   
    if(ret)printf("create thread failed! ret:%d\n",ret);
    }
     for(i=0;i<3;i++)      
    usleep(1);
    for(i=0;i<3;i++)
    pthread_join(tid[i],NULL);   //等待线程结束
   
    return 0;
}

多进程成功运行截图

 

多线程成功运行截图

  我是一个新手小码渣,此次纯粹是为了练习使用,如有不周请原谅!

猜你喜欢

转载自www.cnblogs.com/Ada-Yxd/p/12006826.html
今日推荐