赞
踩
任务:
通过提示,在右侧编辑器中补充代码,完成在指定文件中添加内容,具体要求如下:
创建进程;
父进程向文件中添加hello world!;
子进程向文件中添加hello welcome!;
只需修改文件内容即可,平台将为你输出文件内容。
提示:fork()函数的返回值为0时则为子进程。
在使用创建进程函数前,我们需要先导入unistd.h
库。
进程创建函数原型:pid_t fork(NULL)
例如
pid_t pid = fork(); //pit_t 是引入unistd.h 库后有的
//pid_t 是整形 类同于 int
如上,我们就创建了一个进程
这里的pid在子进程中返回值为0
所以答案如下:
#include <stdio.h> #include<unistd.h> #include <string.h> //请在此处添加导入相应库函数代码 int main(){ FILE *fp=fopen("test.txt","w+"); //这里是打开文件的操作 int pid; //pid表示fork函数的返回值 /********** Begin **********/ char *str1="hello world!\n"; char *str2="hello welcome!\n"; pid=fork(); if(pid==0) { fputs(str2,fp); //这个是向文件中写入字符串 } else fputs(str1,fp); /********** End **********/ fclose(fp); return 0; }
任务:
在右侧编辑器补充代码,要求如下:
创建进程;
在父进程中输出entering main process—;
在子进程中使用execl()函数调用src/step2/hello.c文件,测试环境中已将path置为src/step2,因此带路径的文件名为./hello
进程的加载:
execl()函数:
int execl(const char *path, const char *arg, ...)
函数参数说明:
path
:要执行的程序路径。可以是绝对路径或者是相对路径。在execv、execve、execl和execle这4个函数中,使用带路径名的文件名作为参数。
arg
:程序的第0个参数,即程序名自身。相当于argv[O]。
…
:命令行参数列表。调用相应程序时有多少命令行参数,就需要有多少个输入参数项。最后应该以NULL结尾,表明命令行参数结束。
返回值:-1表明调用exec失败,无返回表明调用成功。
所以答案如下:
#include <stdio.h> #include<string.h> #include<unistd.h> //请在此处添加导入相应库函数代码 int main(){ /********** Begin **********/ //父进程输出 int pid; pid=fork(); if(pid==0) { execl("./hello",NULL); } else { printf("entering main process---\n"); } //子进程执行hello.c文件 /********** End **********/ return 0; }
任务:
根据提示,在右侧编辑器补充代码,创建两个子进程,第一个进程打印I am first process!,第二个进程打印I am second process!,父进程打印I am father process!。
要求实现先打印第一个进程内容,再打印第二个进程内容,最后打印父进程内容。
提示:进程加载execl函数调用输出用法execl(“/bin/echo”,“echo”, “输出语句”, NULL);
上答案:
#include<stdio.h> #include<string.h> #include<unistd.h> #include<sys/wait.h> //请在此处添加导入相应库函数代码 int main() { int p1, p2; //进程ID /********** Begin **********/ p1=fork(); if(p1==0) execl("/bin/echo","echo", "I am first process!", NULL); else wait(NULL); p2=fork(); if(p2==0) execl("/bin/echo","echo", "I am second process!", NULL); else wait(NULL); printf("I am father process!"); //execl("/bin/echo","echo",NULL); /********** End **********/ return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。