使用文件io加密文件

使用文件IO完成,将源文件中的所有内容进行加密(大写转小写、小写转大写)后写入目标文件中

源文件内容不变

#include <myhead.h>
#include <ctype.h>

int main(int argc, const char *argv[])
{
    //判断传入的是否为三个文件
    if (argc != 3)
    {
        printf("input file error\n");
        printf("usage:./a.out srcfile destfile\n");
        return -1;
    }

    //以只读的形式打开源文件
    int srcfd = open(argv[1], O_RDONLY);
    if (srcfd == -1)
    {
        perror("open srcfile error\n");
        return -1;
    }

    //以只写的形式打开目标文件
    int destfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC);
    if (destfd == -1)
    {
        perror("open destfile error\n");
        return -1;
    }

    char buf[128] = "";
    ssize_t res;
    while ((res = read(srcfd, buf, sizeof(buf))) > 0)
    {
        for (size_t i = 0; i < res; ++i)
        {
            if (isupper(buf[i]))
            {
                buf[i] = tolower(buf[i]);
            }
            else if (islower(buf[i]))
            {
                buf[i] = toupper(buf[i]);
            }
        }
        buf[res] = '\0'; // 添加字符串结束符
        write(destfd, buf, res);
    }
    printf("加密成功\n");
    close(srcfd);
    close(destfd);
    return 0;
}

并发和并行的区别:

  1. 并发(Concurrency)
    • 定义:指在同一时间段内,多个任务或事件在宏观上同时发生,但在微观上,这些任务或事件是交替执行的,即在同一时刻只有一个任务或事件在处理器上运行。
    • 核心特点:任务或事件在时间上存在重叠,但并非真正的同时执行。
  2. 并行(Parallelism):
    • 定义:指在同一时刻,多个任务或事件在多个处理器上同时执行,无论是从宏观还是微观的角度来看,这些任务或事件都是同时进行的。
    • 核心特点:真正的多任务或多事件同时执行,需要多处理器或多核心的支持。

什么是进程:

进程(Process)是计算机中的一个实体,是系统进行资源分配和调度的一个独立单元,是操作系统结构的基础。简单来说,进程是操作系统中用于执行程序代码的一个实体,它包含了程序执行时所需的所有资源,如代码、数据、堆栈、文件描述符等,以及执行时所需的状态信息,如程序计数器、CPU寄存器的值等。

进程具有以下几个基本特征:

  1. 动态性:进程是程序的一次执行过程,是动态产生、变化和消亡的。程序是静态的,它只是一组指令的集合,而进程则是程序的执行过程,具有生命周期。

  2. 并发性:多个进程可以在系统中并发执行,即它们可以同时存在于内存中,各自独立地执行自己的任务。并发性是操作系统的重要特性之一,它提高了系统的资源利用率和吞吐量。

  3. 独立性:进程是系统进行资源分配和调度的独立单元,每个进程都拥有自己独立的地址空间、系统资源(如文件、内存等)和状态信息。进程之间的通信需要通过特定的机制(如管道、消息队列、共享内存等)来实现。

  4. 异步性:由于进程之间的相互制约,使得进程的执行通常呈现出间断性的特征,即进程的执行过程不是一条直线,而是走走停停,以不可预知的速度向前推进。这种特性称为进程的异步性。

  5. 结构性:进程由程序、数据和PCB(进程控制块)三部分组成。其中,程序是进程要执行的代码;数据是程序执行时所需要和产生的信息;PCB是进程存在的唯一标志,包含了进程的描述信息和控制信息。

进程和程序的区别:

程序是静态的,而进程是动态的。
程序是永久的,而进程是暂时存在的。
进程是程序的一次执行,而进程总是对应至少一个特定的程序。

进程的状态有哪些:

进程一共有5种状态,分别是创建、就绪、运行(执行)、终止、阻塞。

系统中的多个进程的调度机制都有哪些:

1. 先来先服务(FCFS)调度算法

  • 定义:按照进程到达的先后顺序进行调度,即先来先执行。
  • 特点
    • 非抢占式:一旦进程开始执行,就不会因为其他进程的到来而中断。
    • 公平性:每个进程都有机会按顺序执行。
    • 简单性:算法实现较为简单。
  • 应用场景:适用于对公平性和实现简单性有要求的场景。

2. 短作业优先(SJF)调度算法

  • 定义:优先处理预计运行时间短的进程。
  • 特点
    • 非抢占式或抢占式:非抢占式下,短作业优先在作业或进程结束时或阻塞时才进行调度;抢占式下,每当有新进程到达时,都会检查是否需要抢占当前正在执行的进程。
    • 提高系统吞吐量:短作业的快速执行有助于释放CPU资源,提高系统吞吐量。
    • 对长作业不利:长作业可能需要等待较长时间才能得到执行。
  • 应用场景:适用于对响应时间和效率有较高要求的系统,如批处理系统、交互式系统以及实时系统。

3. 优先级调度算法

  • 定义:根据进程的优先级来分配资源,优先级高的进程优先获得资源(执行)。
  • 特点
    • 非抢占式或抢占式:非抢占式下,进程一旦开始执行就不会被中断;抢占式下,当有高优先级进程到达时,会中断当前进程的执行。
    • 优先级可以静态或动态设置:静态优先级在进程创建时确定,动态优先级则根据进程的行为(如等待时间)动态变化。
    • 灵活性强:可以灵活地处理不同类型的进程需求。
  • 应用场景:广泛应用于各种操作系统中,特别是需要处理紧急任务或重要任务的场景。

4. 时间片轮转(RR)调度算法

  • 定义:将CPU时间分割成一系列的时间片,每个进程被分配一个时间片,在该时间片中,进程可以执行其代码。时间片用完后,进程被放回就绪队列的末尾,等待下一次调度。
  • 特点
    • 简单且公平:每个进程都有平等的执行机会。
    • 易于实现:适合于单处理器环境。
    • 控制CPU使用率:可以有效地控制CPU使用率,提高系统响应速度。
    • 高并发下效率可能下降:在高并发情况下,进程切换的开销可能导致效率下降。
  • 应用场景:主要用于分时系统,以提供用户友好的交互体验。

5. 多级反馈队列(MFQ)调度算法

  • 定义:结合了多种调度算法的优点,将进程分为不同的优先级队列,每个队列有不同的时间片长度和优先级。
  • 特点
    • 灵活性高:可以适应不同类型的进程需求。
    • 效率高:通过合理的队列设置和时间片分配,可以提高系统整体效率。
    • 复杂性较高:实现起来相对复杂。
  • 应用场景:适用于需要处理多种类型进程的系统,如通用操作系统。
  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值