COPY程序的编写
(作者:Baron_wu 禁止转载)
一、实验描述
在这个实验中,我们要做一个程序,这个程序是将一个文件的内容复制到一个目标文件。首先这个程序提示用户输入要复制的原始文件的名字,以及要复制到的目标文件的名字。
确保包括必要的错误检查,包括确保原始文件存在。再使用程序的同时我们要监视这个过程中所用到的系统调用。Linux可使用strace来完成。
二、相关原理与知识
(完成实验所用到的相关原理与知识)
系统调用的工作方式:
一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用内核函数。CPU硬件决定了这些(这就是为什么它被称作"保护模式")。系统调用是这些规则的一个例外。其原理是进程先用适当的值填充寄存器,然后调用一个特殊的指令,这个指令会跳到一个事先定义的内核中的一个位置(当然,这个位置是用户进程可读但是不可写的)。在Intel CPU中,这个由中断0x80实现。硬件知道一旦你跳到这个位置,你就不是在限制模式下运行的用户,而是作为操作系统的内核–所以你就可以为所欲为。
进程可以跳转到的内核位置叫做sysem_call。这个过程检查系统调用号,这个号码告诉内核进程请求哪种服务。然后,它查看系统调用表(sys_call_table)找到所调用的内核函数入口地址。接着,就调用函数,等返回后,做一些系统检查,最后返回到进程(或到其他进程,如果这个进程时间用尽)。如果你希望读