1.练习在shell环境下编译执行程序 (注意: ①在vi编辑器中编写名为sample.c的c语言源程序 ②用linux自带的编译器gcc编译程序,例如:gcc –o test sample.c ③编译后生成名为test.out的可执行文件; ④最后执行分析结果;命令为:./test) 注意:linux自带的编译程序gcc的语法是:gcc –o 目标程序名 源程序名,例如:gcc –o sample1 sample1.c,然后利用命令:./sample 来执行。如果仅用“gcc 源程序名”,将会把任何名字的源程序都编译成名为a.out的目标程序,这样新编译的程序会覆盖原来的程序,所以最好给每个源程序都起个新目标程序名。 2.进程的创建 仿照例子自己编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a”,子进程分别显示字符“b”和“c”。观察记录屏幕上的显示结果,并分析原因。
时间: 2024-02-12 17:02:22 浏览: 46
1. 编译执行程序的步骤如下:
- 在终端或命令行中进入要编译的源程序所在的目录。
- 使用vi编辑器创建一个名为sample.c的C语言源程序。
- 使用以下命令将源程序编译成可执行文件:
```
gcc -o test sample.c
```
这将生成名为test.out的可执行文件。
- 最后,使用以下命令执行程序:
```
./test
```
2. 下面是一个示例程序,使用系统调用fork()创建两个子进程并让它们各自显示不同的字符:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
pid_t pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
printf("Error: Fork Failed.\n");
exit(1);
} else if (pid1 == 0) { // Child process 1
printf("Child 1 (PID %d) displays 'b'\n", getpid());
printf("b\n");
} else { // Parent process
pid2 = fork();
if (pid2 < 0) {
printf("Error: Fork Failed.\n");
exit(1);
} else if (pid2 == 0) { // Child process 2
printf("Child 2 (PID %d) displays 'c'\n", getpid());
printf("c\n");
} else { // Parent process
printf("Parent (PID %d) displays 'a'\n", getpid());
printf("a\n");
}
}
return 0;
}
```
该程序使用fork()创建了两个子进程,每个子进程都会在屏幕上显示一个字符,而父进程将显示另一个字符。
当程序运行时,会产生三个进程:一个父进程和两个子进程。输出结果可能会因系统而异,但以下是示例输出:
```
Parent (PID 1234) displays 'a'
a
Child 1 (PID 1235) displays 'b'
b
Child 2 (PID 1236) displays 'c'
c
```
该程序的输出结果表明,每个进程都执行了相应的代码。父进程首先执行,然后两个子进程分别执行它们自己的代码。由于进程是并发运行的,因此输出的顺序可能会有所不同。