操作系统上机实验一
实验一 进程的建立
【实验软硬件环境】
Linux、Win11、GCC
【实验目的与内容】
学会通过基本的Linux进程控制函数, 有父进程创建子进程,并实现协同工作。 创建两个进程,让子进程读取输入,父进 程等待子进程读完文件后继续执行。
【实验程序及分析】
Windows系统下
父进程代码 father.cpp
1 |
|
子进程代码 child.cpp
1 |
|
代码分析
在父进程中创建子进程代码
CreateProcess("child.exe",NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&sui,&pi)
1
2
3
4
5
6
7
8
9
10
11BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation );lpApplicationName
:子进程名,注意,应包含完整的路径名,且路径名 中出现斜杠处应多加一个反斜杠(转义字符), 如..\\EventChild\\Debug\\EventChild.exe
lpCommandLine
:命令行参数,可设为NULL。lpProcessAttributes
、lpThreadAttributes
:进程、纯种的安全描述符,可设为 NULL表示默认的安全描述。bInheritHandles
:打前进程中打开的句柄是否可以被子进程所继承。dwCreationFlags
:表示子进程的创建状态和优化级别。本实例中设为CREATE_NEW_CONSOLE,表示为子进程创建一个新的控制台。lpEnvironmen
t:子进程所使用的环境变量。设为NULL表示与当前进程使用相同 的环境变量。lpCurrentDirector
y:子进程运行的初始目录。若为NULL表示与调用进程有相同 的目录。lpStartupInfo
:用于设置子进程的各种属性。LPCTSTR lpName
:用于返回新进程的信息。父进程等待子进程完成
WaitForSingleObject(pi.hProcess,INFINITE);
1
DWORD **WaitForSingleObject**(HANDLE hHandle,DWORD dwMilliseconds);
hHandle
:等待的事件对象的句柄。dwMilliseconds
:等待的时间,超时则返回。若设为0,则立即返回;若设为INFINITE,则一直等待。返回值:失败则返回WAIT_FAILED。
子进程结束前
system("pause");
父进程将会一直等待下去直到子进程的child.exe关闭,father.exe进程才会继续运行。
文件的IO操作
父进程中读取操作
1
2FILE *fp = fopen("test.txt","r");
fread(content,sizeof(char),100,fp);子进程中写入操作
1
2FILE *fp = fopen("test.txt", "w+")
fwrite(something, strlen(something), 1, fp);C库函数
fopen
声明C 库函数 – fopen() | 菜鸟教程 (runoob.com)
1
FILE *fopen(const char *filename, const char *mode)
模式 | 描述 |
---|---|
“r” | 打开一个用于读取的文件。该文件必须存在。 |
“w” | 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 |
“a” | 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。 |
“r+” | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
“w+” | 创建一个用于读写的空文件。 |
“a+” | 打开一个用于读取和追加的文件。 |
【实验截图】
【实验心得体会】
学会了使用C语言创建子进程