vlambda博客
学习文章列表

用C语言实现Linux命令——模拟gcc

我们在使用Linux C编程的时候,编译一个文件,比如hello.c,会使用gcc命令,通常的格式是gcc -o hello hello.c,将hello.c文件编译为可执行文件hello,如果想用C语言写一个程序来实现gcc的话,要用到两部分主要的内容:命令行参数的处理和在C语言中执行终端命令。

先说C语言中命令行参数的传入,需要借助argv数组,大家应该看到过这样形式的代码:

argc是整型,记录命令行参数的个数,char **argv是个二维字符数组,记录传入的参数,有时也写作char *argv[],两者是等价的,后者表示这是一个字符串数组。

如果我们希望生成一个mygcc程序,编译时我们需要运行./mygcc  filename.c,argv要接收两个参数,我们在程序中需要用到string.h库中处理字符串的函数。

再来说C语言中终端命令的使用,我们需要借助system()函数,别忘了要用到stdlib.h库。

接下来我们就可以尝试写一个mygcc程序了:

用C语言实现Linux命令——模拟gcc

这里我们将传入的filename.c文件编译为名为filename的可执行文件,我们还用到了字符串复制函数strcpy()、字符串分割函数strtok()和字符串连接函数strcat()。

我们尝试编译一个经典的"hello world"文件。

我们将mygcc.c编译为mygcc后就可以直接用它来编译别的文件了。