Linux系统编程简介

来源:互联网 发布:win10用c语言编程软件 编辑:程序博客网 时间:2024/06/11 18:32

一、Linux内核模块

1、  进程调度

2、  内存管理

3、  VFS

4、  网络接口

5、  进程间通信

二、操作系统三个基本抽象

1、  文件是对I/O设备的抽象表示,虚拟存储器是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。

2、 

3、  进程是操作系统对正在运行的程序的一种抽象。一个系统可以运行多个进程,而每个进程好像在独占使用硬件。

4、  虚拟存储器

q  虚拟存储器为每个进程提供了一个大的、一致的、私有的地址空间

q  它将内存看成是存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在主存与磁盘中来回交换数据。

q  为每个进程提供一致的地址空间,简化了存储管理

q  保护每个进程的地址空间不被其他进程破坏。

5、  进程虚拟地址空间

6、  文件

q  文件是一系列的字节序列

q  它向应用程序提供了一个统一的视角,来看待系统中各式各样的I/O设备。

7、  虚拟文件系统

q  虚拟文件系统是内核实现的一种架构,为用户空间提供统一的文件操作接口,即文件系统调用。它在内核内部为不同的真实文件系统提供一致的抽象接口。

q  用户通过系统用与内核中的虚拟文件系统交互,进而操作实际的文件系统和设备。

Linux系统编程介绍

一、系统编程与应用编程

q 系统编程

    在操作系统之上利用系统调用、C库进行对系统资源进行访问。如apachegccgdb

q 应用编程

在更高层次的编程接口或者库之上构建应用程序。如android程序(android sdk)、iphone程序(iphone sdk)、QT程序设计(QTMFC程序设计(MFC)等。

二、系统调用与C库的关系

q 系统调用与C库从形式上来看都C函数

q C库函数有些是调用系统调用来实现的,比如说mallocfree调用brkprintf调用write系统用,有些函数不需要任何系统调用,比如absstrcpyatoi等,因为它并不是必需要使用内核服务

q 系统调用通常提供的是最小界面,而C库函数通常提供更复杂的功能。

三、内核如何处理系统调用

q 每个系统调用被赋予一个系统调用号

q i386平台上,执行一个系统调用是通过int 0x80指令完成的。

q eax存放系统调用号

q ebxecxedxesiedi存储系统调用参数,对于超过5个参数的系统调用,用一个寄存器指向用户空间存储所有系统调用参数的缓存。

四、错误处理

q 在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。

q errno这个全局变量在<errno.h>头文件中声明如下:extern int errno;

q 错误处理函数

q perror

q strerror

//01error.c

#include<unistd.h>

#include<stdio.h>

#include<errno.h>

#include<string.h>

 

 

intmain()

{

         int ret;

         ret = close(10);

         if(ret == -1)

                   perror(“close error:”);

         if(ret == -1)

                   fprintf(stderr,”closeerror:%s\n”,strerror(errno));

 

         printf(“INT ERROR:%s\n”,strerror(EINTR));

 

         return 0;

}

六、错误代码

E2BIG                参数列表太长

EACCESS           权限不足

EAGAIN             重试

EBADF               错误的文件描述符

EBUSY                设备或资源忙

ECHILD              无子进程

EDOM                数学参数不在函数域内

EEXIST               文件已存在

EFAULT              地址错误

EFBIG                 文件太大

EINTR                系统调用被中断

原创粉丝点击