实验目的
1) 概念:Linux的gcc编译器
2) 演示/实践:gcc编译器的初步和入门(编写一个带printf的while程序)
3) 演示/实践:Linux进程控制相关的命令(如ps/pstree/top/kill/等)演示/实践:Linux进程控制相关的系统调用(如fork()/getpid()等)
4) 概念:Linux的gdb调试器
5) 概念:Linux的make工具及其Makefile
6) 演示/实践:make工具及其Makefile的初步和入门(多个c/h文件构成的一个C项目:但是存在bug);进而用gdb调试器来调试和分析此bug
实验步骤:
Task1: gcc编译器的初步和入门:利用vi/vim编辑器,输入以下程序while.c的代码,然后利用gcc编译器进行编译、链接,和运行
Task2: Linux进程控制相关的命令:利用top/ kill/ps/htop/等的命令,要求完成的步骤如下描述。
1.输入top观察当前进程状态:
2.运行以上lab1的while程序,再次执行top命令,然后观察新的、当前的进程状态
3. 等待while程序执行完成正常结束后,进程消失
4. 重新执行while程序,并使用kill结束程序,top中进程消失
5. 使用htop命令
Task3: Linux进程控制相关的系统调用(如fork()/getpid()等):通过process.c程序来理解Linux进程创建的过程和特点(如父子进程的关系、“一次调用和两次返回”的特点)。具体过程包括:利用vi/vim编辑器,输入以下程序process.c的代码,然后利用gcc编译器进行编译、链接,和运行
Task4: make工具及其Makefile的初步和入门,gdb调试器的初步和入门:利用vi/vim编辑器,编写一个由多个文件(如.c和.h)构成的程序,通过Makefile文件来使用make,从而完成本程序的编译和链接过程,然后利用gcc编译器进行编译、链接和运行,观察其存在的bug,然后利用gdb调试器分析和解决这个bug。
点击查看代码
/*main.c*/
#include "mytool1.h"
#include "mytool2.h"
int main()
{
mytool1_print("hello mytool1!");
mytool2_print("hello mytool2!");
return 0;
}
/*mytool1.c*/
#include "mytool1.h"
#include <stdio.h>
void mytool1_print(char *print_str)
{
printf("This is mytool1 print : %s ",print_str);
}
/*mytool1.h*/
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
void mytool1_print(char *print_str);
#endif
/*mytool2.c*/
#include "mytool2.h"
#include <stdio.h>
void mytool2_print(char *string)
{
char * string2;
int size,i;
size = strlen(string1);
string2 =(char*)malloc(size+1);
for(i=0;i<size;i++)
string2[size-i]=string1[i];
string2[size+1]=‘\0’;
printf(“the changed string is %s\n ”,string2);
}
/*mytool2.h*/
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif