首页 > 其他分享 >《信息安全系统与设计》第七周学习笔记

《信息安全系统与设计》第七周学习笔记

时间:2023-10-21 19:35:15浏览次数:30  
标签:第七 int MAX 信息安全 pipefd 笔记 command 进程 close

多任务处理

  • 一般来说,多任务处理指的是同时进行几项独立活动的能力
  • 多任务处理是所有操作系统的基础,也是并行编程的基础

进程的概念

  • 操作系统是一个多任务处理系统。在操作系统中,任务也称为进程
  • 进程的正式定义:进程是对映像的执行
  • 用一个简单的PROC结构体来表示进程
    • typedef struct proc{
      struct proc *next;
      int *ksp;
      int oid;
      int ppid;
      int status;
      int priority;
      int kstack[1024];
      }PROC;
  • next是指向下一个PROC结构体的指针用于在各种动态数据结构中维护PROC结构体
  • ksp字段是保存的堆栈指针
  • pid是标识一个进程的进程ID编号
  • ppid是父进程ID编号
  • status是进程的当前状态
  • priority是进程调度优先级
  • kstack是进程执行时的堆栈

sh模拟器

  • 本编程项目是编写一个c语言程序来模拟Linux sh实现对命令的执行。目标是让读者理解Linux sh如何工作。使用了fork().,esec(),,close(),exit(),pipe()系统调用和字符串操作。
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

#define MAX_CMD_LEN 1024
#define MAX_ARGS 64

void execute_command(char *command) {
 
    char *args[MAX_ARGS];
    char *token = strtok(command, " ");
    int i = 0;
    while (token != NULL && i < MAX_ARGS) {
        args[i] = token;
        token = strtok(NULL, " ");
        i++;
    }
    args[i] = NULL;

   
    int pipefd[2];
    pipe(pipefd);

    
    pid_t pid = fork();
    if (pid == 0) {
        // 子进程
        close(pipefd[0]); 
        dup2(pipefd[1], STDOUT_FILENO); 
        close(pipefd[1]); 

       
        execvp(args[0], args);
        perror("execvp");
        exit(1);
    } else if (pid > 0) {
        
        close(pipefd[1]); 
        wait(NULL);

     
        char buffer[1024];
        int nbytes = read(pipefd[0], buffer, sizeof(buffer));
        if (nbytes > 0) {
            buffer[nbytes] = '\0';
            printf("%s", buffer);
        }

        close(pipefd[0]); 
    } else {
        perror("fork");
    }
}

int main() {
    while (1) {
        char command[MAX_CMD_LEN];
        printf("Enter a command (or 'exit' to quit): ");
        if (fgets(command, sizeof(command), stdin) == NULL) {
            break;
        }
        command[strcspn(command, "\n")] = '\0'; 

        if (strcmp(command, "exit") == 0) {
            break;
        }

        execute_command(command);
    }

    return 0;
}

苏格拉底挑战



标签:第七,int,MAX,信息安全,pipefd,笔记,command,进程,close
From: https://www.cnblogs.com/zsj6787/p/17779210.html

相关文章

  • 2023-2024-1 20211327 信息安全系统设计与实现 学习笔记6(必做)
    学习笔记6Unix/Linux系统多任务处理概述多任务处理系统Unix/Linux系统的进程管理实践过程Unix/Linux系统多任务处理概述1.进程管理:进程是程序的执行实例。Unix和Linux支持多个进程同时运行,每个进程都有自己的独立地址空间和资源。这使得多个应用程序可以同时运行,互不干......
  • 性能测试学习笔记(五)
    一、操作系统监控数值项模块监控命令CPUlscpu、cpuinfo、top、atop、vmstat、mpstat、pidstat、Dstat、Nmon、sar、cpupower、irqbalanceMemorytop、atop、vmstat、pidstat、Dstat、Nmon、sar、free、smemI/Oiostat、iotop、pidstat、Dstat、Nmon、sarNetwork......
  • uboot为LED添加DM驱动--Apple的学习笔记
    一,前言开始玩所有板子一般都是先点灯,比如我可以在汇编中点灯,可以在board_init中用writel写寄存器点灯,当我要进一步熟悉下设备树驱动模型,不管学习linux还是学习uboot这块我理解类似,所以我要通过添加设备树及配置开关来实现默认打开led0和led1的功能。二,实现的过程1,先有了dts信息,我从......
  • 学习笔记六
    学习笔记六一.作业要求自学教材第3章,提交学习笔记(10分),评分标准如下知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核......
  • UBUNTU下第一次写简单驱动(笔记)
    一、环境Ubuntu14.04+vmwaretools二、步骤先写个.c文件,驱动文件一般没有printf,有自己的一套,先写一个helloword.c /* *helloworld.c * *宇文凌风 * */     #include"linux/init.h" #include......
  • 学习笔记6
    第三章学习总结多任务处理一般指的是同时进行几项独立活动的能力,这种逻辑并行性称为“并发”。进程的概念进程是对映像的执行每个进程用一个独特的数据结构表示,称为进程控制块(PCB)或任务控制块(TCB),本书称为PROC结构体。如下是一个非常简单的PROC结构体:next:指向下一个PROC......
  • 《信息安全系统设计与实现》第七周学习笔记
    《信息安全系统设计与实现》第七周学习笔记第三章Unix/Linux进程管理多任务处理多任务处理简单说,就是同一时间给多个程序运行处理数据。即使在系统中通常有许多其他的程序在运行,但进程也可以向每个程序提供一种假象,仿佛它在独占地使用处理器。但事实上进程是轮流使用处理器的......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第六周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第六周学习笔记一、任务要求1.自学教材第3章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X......
  • # 20211301 学习笔记6
    20211301郑润芃学习笔记6第三章教材知识总结3.1多任务处理多任务处理:指同时进行几项独立活动的能力单CPU:一次只能执行一个任务多任务处理:通过不同任务之间多路复用CPU的执行时间上下文切换:不同人物之间的执行切换机制并发:逻辑并行性3.2进程的概念进......
  • 学习笔记6
    第三章.Unix/Linux进程管理多任务处理:指的是同时几项独立活动的能力是所有操作系统的基础,是并行编程的基础进程的概念:进程是对映像的执行在操作系统中,每个进程用一个独立的数据结构表示,叫进程控制块(PCB)和任务控制块(TCB)。本书中称为PROCtypedefstruct......