纵向对比fd与FILE结构体
fd:是文件描述符,linux下有三个默认打开的文件描述符,0-->标准输入(键盘),1-->标准输出(显示器),2-->标准错误(显示器),fd的使用规则:在files_struct数组中,找到没有被使用的最小的整数下标,作为新的文件描述符。
FILE:是一个结构体,但是其被封装于库函数被系统调用,所以C库FILE结构体中一定含有fd,那么通过fd就可以访问文件。
编写的自主shell
#include<stdio.h>
#include<unistd.h>
#include <stdlib.h>
int main()
{
while(1)
{
printf("[mybaby@myhost mydir]#");
fflush(stdout);
char buf[1024];
ssize_t s = read(0,buf,sizeof(buf)-1);
if(s>0)
{
buf[s-1] =0;
printf("%s\n",buf);
}
char* start = buf;
char* _argv[32];
_argv[0] = start;
int i= 1;
while(*start)
{
if(*start==' '){
*start = 0;
start++;
_argv[i++]=start;
}
else{
start++;
}
_argv[i]=NULL;
pid_t id = fork();
if(id==0){
execvp(_argv[0],_argv);
}
else{
pid_t ret = waitpid(id,NULL,0);
if(ret>0)
{}
}
return 0;
}
箭头指向的地方就是我自己的bash。
编写简单的add/sub/mul/div函数,打包成动/静态库。
test.c:
生成静态库的命令:
首先将.c的文件进行生成目标文件,再用
ar -rc libXXX.a XXX.o XXX.o
生成静态库(XXX.o根据自己的文件数量写多少个,我这里有四个所以跟了四个不同的文件
查看静态库的命令:
接下来就可以运行程序啦: