linux内核
一 初识linux内核
1.1操作系统和内核简介
操作系统的精确定义并没有一个统一的标准,这里我认为操作系统是指整个系统负责完成最基本功能和系统管理的那些部分
这些部分包括内核,设备驱动程序,启动引导程序,基本的文件管理工具和系统工具
用户界面是操作系统的外在表象,内核才是操作系统的内在核心。内核有时候被称作管理者或者操作系统核心,内核独立于普通的应用程序,它一般处于系统态,这种被保护起来的空间称为内核空间
在系统中运行的程序通过系统调用来与内核通信,这种应用程序通常调用库函数,再由库函数通过系统调用界面,让内核代其完成各种不同的任务
这里是应用程序,内核和应减低关系
1.运行于用户空间,执行用户进程
2.运行于内核空间,处于进程上下文,代表某个特定的进程执行
3.运行于内核空间,处于中断上下文,于任何进程无关,处理某个特定的中断
以上所列几乎包括所有情况,即使边边角角的情况也不列外,例如,当cpu空闲的时候,内核就运行一个空进程,处于进程上下文,但运行内核空间
二 对Linux文件操作
对于linux文件的操作,这里使用linux的系统调用进程操作
2.1.linux文件进行拷贝
#include<iostream>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
using namespace std;
int MAX_SIZE=1024;
int main()
{
int fd=open("./text.txt",O_RDWR);
int wfd=open("./copy.txt",O_CREAT|O_WRONLY);
char buffer[1024];
bzero(buffer,0);
int size=0;
while(size=read(fd,buffer,sizeof(buffer)))
{
write(wfd,buffer,size);
}
close(fd);
close(wfd);
return 0;
}
这段代码是对文件进行拷贝的代码,设定一个buffer数组,然后一直读,把读到的写入文件即可
这里没有对打开的文件和读写操作的成功进行判断,可自行添加
2.2 重定向到文件
这里的要求是把终端输入的按回车写入到文件中,直到输入over就停止
#include<iostream>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
using namespace std;
int MAX_SIZE=1024;
int main()
{
int fd=open("over.txt",O_CREAT|O_WRONLY|O_TRUNC, 0644);
char buffer[MAX_SIZE];
bzero(buffer,0);
int size=0;
while(1)
{
char c;
int i=0;
while(i<MAX_SIZE-1)
{
size=read(STDIN_FILENO,&c,1);
if(size<=0)
{
close(fd);
//exit(0);
return 1;
}
if(c=='\n')
{
buffer[i++]=c;
break;
}
buffer[i++] = c;
}
buffer[i]='\0';
char line[MAX_SIZE];
strncpy(line,buffer,i);
int len=strlen(line);
if(len>0&&line[len-1]=='\n')
{
line[len-1]='\0';
}
if(strcmp(line,"over")==0)
{
break;
}
//写入数据
if(write(fd,buffer,i)==-1)
{
close(fd);
return -1;
}
}
close(fd);
return 0;
}
这里因为按下回车才把输入的内容写入,所以不能一段一段读,这里采用一个字符一个字符读,处理输入的‘\n’,然后创建一个新的line数组用于处理输入over\n,因为如果直接比对会失败,因为后有一个回车