个人建的博客:http://34.96.139.59/archives/16
项目一:Linux进程创建与控制
1、实验目的
1)了解进程概念,掌握fork函数和vfork函数的特性和使用方法,观察fork函数和vfork函数的工作机制;
2)理解进程之间的创建关系,认识多进程程序中父子进程之间的关系及创建原理;
2、实验环境
Red Hat 企业版 Linux 6.3;VMware虚拟机
3、预备知识
1)vi编辑器的使用
vi ‘文件名’:vi打开某文件
i进行插入,esc退出模式。:指令准备。
q退出,w写入保存,!强制
2)gcc编辑器的使用
gcc test.c -0 test
3)fork系统调用
创建子程序,子程序完全复制父程序,并从头开始。子程序与父程序是同时执行。
4)vfork系统调用
同fork,但vfork的子程序执行完,父程序才继续执行,并且父子进程共享数据段
5)getpid系统调用
getpid返回当前进程标识,getppid返回父进程标识。
6)wait系统调用
等待一段时间
7)cat系统调用
cat x.txt :显示文件内容
8)write系统调用
将信息写入文件
9)open系统调用
打开文件
4、实验内容
1)使用vi编辑器编写一段程序,输出为“This is a sample!”,使用gcc命令编译并运行输出。
代码:
#include<stdio.h>
int main(){
printf("This is a sample!\n");
return 0;
}
编译执行:
gcc test.c -o test
./test
2)编写一段程序,定义公共变量glob,初值为3,main函数局部变量loc,初值为3,使用fork命令创建子进程,要求父进程显示“parent process doesn't change the glob and loc :\n”,子进程显示“child process tchanges glob and loc :\n”,父子进程均输出glob和loc的值,运行错误则输出“fork()error!”。
代码:
#include<stdio.h>
int glob = 3;
int main(){
int pid;
int loc = 3;
printf("before fork(): glob = %d,loc = %d\n",glob,loc);
if((pid=fork())<0){
printf("\nfork()error\n");
return 0;
}else if(pid==0){
glob++;
loc--;
printf("\nchild process changes glob and loc;\n");
}else
printf("parent process doesn`t change the glob and loc;\n");
printf("glob = %d, loc = %d\n",glob,loc);
return 0;
}
3)使用fork命令生成两个子进程,子进程A将“1111…9999”写入文件myfile,子进程B将“aaaa…zzzz”写入文件myfile
代码:
4-3
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main(){
char* a="1111***9999";
char* b="aaaa***zzzz";
int p1,p2;
FILE *fd;
fd = fopen("myfile","a+");
if(p1=fork()){
fwrite(a,strlen(a),1,fd);
}else if(p2=fork()){
fwrite(b,strlen(b),1,fd);
}else{
fclose(fd);
return 0;
}
}
可选学习内容:
局域网文件互传。(适用于局域网,或虚拟机传文件到主机)
WinSCP软件,后续懒的写了。