进程练习题

#include <mystdio.h>
int main(int argc, const char *argv[])
{
    int fd_r =open("./2024.png",O_RDONLY);
    if( fd_r <0)
    {
        printf("%d",__LINE__);
        perror("open");
        return -1;
    }
    int fd_w =open("./2024_fuben.png",O_WRONLY|O_CREAT|O_TRUNC,0777);
    if(fd_w <0)
    {
        printf("%d",__LINE__);
        perror("open");
        return -1;
    }

    off_t size = lseek(fd_r,0,SEEK_END);
    pid_t pid = fork();

    if(pid>0)
    {
        sleep(4);
        lseek(fd_r,0,SEEK_SET);
        lseek(fd_w,0,SEEK_SET);
        char c;
        for(int i=0;i<size/2;i++)
        {
            read(fd_r,&c,1);
            write(fd_w,&c,1);
        }
        printf("前半部分拷贝完毕\n");
    }
    
    else if(0 == pid)
    {
        char arr1[10],arr2[10],arr3[10];
        sprintf(arr1,"%d",fd_r);
        sprintf(arr2,"%d",fd_w);
        sprintf(arr3,"%ld",size);

        execl("b.out",arr1,arr2,arr3,NULL);
    }
    else{
        perror("fork");
        return -1;
    }
    close(fd_r);
    close(fd_w);
    return 0;
}

#include <mystdio.h>

int main(int argc, const char *argv[])
{
    int fd_r = atoi(argv[0]);
    int fd_w = atoi(argv[1]);
    off_t size = atoi(argv[2]);

    lseek(fd_r,size/2,SEEK_SET);
    lseek(fd_w,size/2,SEEK_SET);
    char c;
    for(int i=0;i<size/2;i++)
    {
        read(fd_r,&c,1);
        write(fd_w,&c,1);
    }
    printf("后半部分拷贝完毕\n");
    return 0;
}

孤儿进程

#include <mystdio.h>

int main(int argc, const char *argv[])
{
    pid_t pid = fork();
    if(0 == pid)
    {
        while(1)
        {
            printf("%d %d\n",getppid(),getpid());
            sleep(1);
        }
    }
    return 0;
}

僵尸进程

#include <mystdio.h>

int main(int argc, const char *argv[])
{
    pid_t pid=fork();
    if(pid>0)
    {
        while(1)
        {
            printf("%d %d __%d__\n",getpid(),pid,__LINE__);
            sleep(1);
        }
    }
    else if(0 == pid)
    {
        for(int i=0;i<3;i++)
        {
            printf("%d %d __%d__\n",getppid(),getpid(),__LINE__);
            sleep(1);
        }
        exit(0);
    }
    else{
        perror("fork");
        return -1;
    }
    return 0;
}

守护进程

#include <mystdio.h>

int main(int argc, const char *argv[])
{
    pid_t pid=fork();
    if(0 == pid)
    {
        //创建会话组
        setsid();
        //修改当前孤儿进程的运行目录
        chdir("/usr");
        //重设文件权限掩码
        //关闭所有文件描述符
        for(int i=0;i<getdtablesize();i++)
        {
            close(i);
        }
        while(1)
        {
            sleep(1);
        }
        
    }

    return 0;
}

相关推荐

  1. 课堂练习3.4:进程的切换

    2024-04-21 11:32:05       48 阅读
  2. <span style='color:red;'>进程</span>

    进程

    2024-04-21 11:32:05      50 阅读
  3. Rust 实战练习 - 5. 多线程,多进程,协程

    2024-04-21 11:32:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 11:32:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 11:32:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 11:32:05       82 阅读
  4. Python语言-面向对象

    2024-04-21 11:32:05       91 阅读

热门阅读

  1. 十、使用repo管理yocto各个layer

    2024-04-21 11:32:05       41 阅读
  2. asp.net core mvc 路由

    2024-04-21 11:32:05       36 阅读
  3. web server apache tomcat11-04-manager 如何管理?

    2024-04-21 11:32:05       36 阅读
  4. npm 常用命令详解

    2024-04-21 11:32:05       41 阅读
  5. C# 匿名方法与扩展方法详解

    2024-04-21 11:32:05       38 阅读
  6. axios的跨越封装

    2024-04-21 11:32:05       33 阅读
  7. 贝叶斯逻辑回归案例和使用场景

    2024-04-21 11:32:05       39 阅读
  8. 事务的隔离级别

    2024-04-21 11:32:05       33 阅读
  9. asp.net core rabbitmq的基本使用

    2024-04-21 11:32:05       37 阅读