关于系统调用,库函数,SHELL的转摘,,,

这之间的关系,没有成型的梳理过,,

但这个都将所有东东比较系统的讲出了概要。。如同打通关节般畅快,特别是SHELL和系统调用的关系。。。让我们在日常计算机操作中,不会迷失自己的方向。。。。

哈哈,这同学写的技术博都短小,易懂,我马上就可以全部看完啦。。。(三个系列:PYTHON,LINUX,TCP/IP)

~~~~~~~~~~~~~~~

http://www.cnblogs.com/vamei/archive/2012/09/19/2692452.html

。。。。。。。

还记得我们在Linux启动的时候。首先会启动内核 (kernel),内核是一段计算机程序,这个程序直接管理管理硬件,包括CPU、内存空间、硬盘接口、网络接口等等。所有的计算机操作都要通过内核传递给硬件。

 

为了我们方便调用内核,我们将内核的功能总结成为系统调用(system call)。系统调用看起来就像是的C语言函数,你也可以在程序中直接调用。Linux系统有两百多个这样的系统调用。系统调用给了上层程序一个清晰的接口,隐藏了内核的复杂结构。一个操作系统上的功能可以看作是系统调用的组合的效果,而且一个操作系统不可能作出超越系统调用的动作。可以说一个系统调用函数就像是汉字的一个笔画,任何一个汉字都要由基本的笔画(点、横、撇等等)构成,而且我们不能臆造出笔画。在命令行中输入$man 2 syscalls可以查看所有的系统调用。你也可以通过$man 2 read来查看系统调用read()的说明。在这两个命令中的2都表示我们要在2类(系统调用类)中查询 (具体各个类是什么可以通过$man man看到)。

 

由于系统调用非常基础,所以有时使用起来很麻烦。比如说一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能,以方便我们编程。比如上面的分配内存的操作,看以定义成为一个库函数(像malloc()这样的函数)。再比如说,在读取文件的时候,系统调用要求我们设置好所需要的缓冲。我们这个时候可以使用Standard IO库中的读取函数,而这个读取函数既负责设置缓冲,又负责使用读取的系统调用函数。使用库函数对于机器来说并没有效率上的优势,但可以把程序员从细节中解救出来。库函数就像是汉字的偏旁部首,它由笔画组成,但使用偏旁部首更容易组成字,比如"铁"。当然,你也完全可以不使用库函数,而直接调用系统函数,就像“人”字一样,不用偏旁部首。

(实际上,一个操作系统要称得上是UNIX系统,必须要拥有一些库函数,比如ISO C标准库,POSIX标准等。)

 

至于shell,可以看作一种特殊的应用。实际上我们之前所说的命令行,就是shell。shell是一个命令解释器(interpreter),当我们输入“ls -l”的时候,它将此字符串解释为1) 在默认路径找到该文件(/bin/ls),2) 执行该文件,并附带参数"-l"。我们之前用>表示重新定向,用|表示管道,也是通过shell进行理解&或者|的含义,再通过系统调用指挥kernel建立具体的重定向或者管道机制。在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用的时候,要通过shell输入命令,以建立运行程序。shell可以执行符合shell语法的文本,这样的文本叫做shell脚本(script)。我们可以在图中看到,shell下通系统调用,上通各种应用,同时还有许多自身的便利可以使用,这些条件让shell脚本可以实现非常强大的功能。UNIX的一条哲学是让每个程序尽量独立的做好一个小的功能。而shell充当了这些小功能之间的"胶水",让不同程序能够以一个清晰的接口(文本流)协同工作,从而增强各个程序的功能。(这也是我们鼓励多用shell,少用图形化界面的原因之一。)

 

。。。。。。。。

时间: 2024-11-01 07:41:27

关于系统调用,库函数,SHELL的转摘,,,的相关文章

使用ltrace工具跟踪PHP库函数调用的方法_php技巧

本文实例讲述了使用ltrace工具跟踪PHP库函数调用的方法.分享给大家供大家参考,具体如下: 可能大家已经很熟悉使用strace来跟踪系统调用,今天介绍一个跟踪库函数的利器ltrace 比如我有这么一段PHP代码 test.php: <?php $y = '1380'; $arr = array(); for($i = 0; $i < 2000; $i ++){ $arr[] = "{$i}"; //故意用引号包起来设成字符串 } for($i = 0; $i <

PHP3 safe

受影响的系统:  PHP 3.00  -------------------------------------------------------------------------------- 描述:       PHP Version 3.0是一个HTML嵌入式脚本语言.其大多数语法移植于C.Java和Perl并结合了 PHP的特色.这个语言可以让web开发者快速创建动态网页.        因其执行在web服务器上并允许用户执行代码,PHP内置了称为'safe_mode'的安全特性,

手把手教你用 strace 诊断问题

早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符,却十有八九看不出个所以然.本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路.  如下真实案例,如有雷同,实属必然!让我们看一台高负载服务器的 top 结果: top 技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以 CPU 排序. 在本例中

PHP3 safe_mode 失效漏洞_php基础

受影响的系统:  PHP 3.00  -------------------------------------------------------------------------------- 描述:     PHP Version 3.0是一个HTML嵌入式脚本语言.其大多数语法移植于C.Java和Perl并结合了 PHP的特色.这个语言可以让web开发者快速创建动态网页.     因其执行在web服务器上并允许用户执行代码,PHP内置了称为'safe_mode'的安全特性, 用于控制在

Linux下缓冲区溢出攻击的原理及对策

前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患. 历史上最著名的缓冲区溢出攻击可能要算是1988年11月2日的Morris Worm所携带的攻击代码了.这个因特网蠕虫利用了fingerd程序的缓冲区溢出漏洞,给

《UNIX环境高级编程(第3版)》——1.11 系统调用和库函数

1.11 系统调用和库函数 所有的操作系统都提供多种服务的入口点,由此程序向内核请求服务.各种版本的UNIX实现都提供良好定义.数量有限.直接进入内核的入口点,这些入口点被称为系统调用(system call,见图1-1).Research UNIX系统第7版提供了约50个系统调用,4.4BSD提供了约110个系统调用,而SVR4则提供了约120个系统调用.具体数字在不同操作系统版本中会不同,新近的大多数系统大大增加了支持的系统调用的个数.Linux 3.2.0提供了380个系统调用,FreeB

linux系统调用和库函数调用的区别

1.系统调用 系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd.h .以write为例:其函数原型为 size_t write(int fd, const void *buf, size_t nbytes),其操作对象为文 件描述符或文件句柄fd(file descriptor),要想写一个文件,必须先以可写权限用open系统调用打开一个文 件,获得所打开文件的fd,例如 fd=open(\"/dev/video\", O_

c语言-系统调用和C语言库函数

问题描述 系统调用和C语言库函数 最近学习操作系统,有些东西不是很明白.c语言的库函数有些是利用系统调用实现的,有些不是.我就想问下不是利用系统调用的那部分,在执行时硬件是怎么知道的呢?最后语言代码被编译成二进制,执行时仍然是由寄存器硬件什么执行的吧,既然没利用系统调用,alu这些东西是怎么懂这些库函数要求的操作是干嘛的啊?不是说系统调用是软硬件的接口吗?还有系统调用和驱动程序的关系是什么? 解决方案 调用系统调用,代码跳入内核态,可以执行任何指令,包括 受保护的指令在用户态,很多指令是受保护的

Linux C中库函数与系统调用的区别详细解析_unix linux

从程序完成的功能来看,函数库提供的函数通常是不需要操作系统的服务,函数是在用户空间内执行的,除非函数涉及到I/O操作等,一般是不会切到核心态的.系统调用是要求操作系统为用户提供进程,提供某种服务,通常是涉及系统的硬件资源和一些敏感的软件资源等. 函数库的函数,尤其与输入输出相关的函数,大多必须通过Linux的系统调用来完成.因此我们可以将函数库的函数当成应用程序设计人员与系统调用程序之间的一个中间层,通过这个中间层,我们可以用一致的接口来安全的调用系统调用.这样程序员可以只要写一次代码就能够在不