写时拷贝
fork()之后,父子进程共享父进程的数据空间,并且内核将这些空间设置为只读的,当父子进程任意一个进程尝试修改数据时,会将修改数据所在的页拷贝一个副本,父子进程对于这个页上的数据就是各自都有一份。
文件
文件描述符:进程所打开的文件–>fork()方法调用之前,父进程打开的文件。
Linux上如何使用代码打开一个文件
C语言– 库函数:fopen() fread() fwrite() fclose() fseek()
man 1 command 查看命令帮助手册
man 2 查看系统调用手册
man 3 库函数 查看库函数的使用手册
1 | FILE *fopen(const char *pathname, const char *mode); |
系统调用:open read write close lseek
1 | int open(const char *pathname, int flags, mode_t mode); |
编程实现将用户在界面输入的数据存储在a.txt中,再将a.txt中的所有内容整体显示到终端上
1 |
|
使用fork()
1 |
|
我自己的虚拟机配的是一核的,如果是2核以上有可能父子进程会同时读出一个字母,也就是并行。
系统调用和库函数的区别
系统调用的实现是在内核中,属于内核空间,库函数的实现是在函数库中,属于用户空间。
利用文件操作的系统调用实现普通函数的cp命令
1 | cp 源文件的路径+文件名 目的路径 |
1 |
|