文章分类 -  linux程序设计

摘要:111111111 阅读全文
posted @ 2013-04-15 09:19 ~风~ 阅读(90) 评论(0) 推荐(0)
摘要:库函数是语言本身的一部分,而系统函数是内核提供给应用程序的接口,属于系统的一部分。函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。函数库调用系统调用在所有的ANSI C编译器版本中,C库函数是相同的各个操作系统的系统调用是不同的它调用函数库中的一段程序(或函数)它调用系统内核的服务与用户程序相联系是操作系统的一个入口点在用户地址空间执行在内核地址空间执行它的运行时间属于“用户时间”它的运行时间属于“系统”时间属于过程调用,调用开销较小需要在用户空间和内核上下文环境间切换,开销较大在C函数库libc中有大约300个函数在UNIX中大约有90个系统调用典型的C函数库调用:sys. 阅读全文
posted @ 2013-04-11 21:23 ~风~ 阅读(389) 评论(0) 推荐(0)
摘要:Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。可以参考《Linux程序设计》(英文原版为《Beginning Linux Programming》,作者是Neil Matthew和Richard Stones)第三章: Working with files。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api,采用这样的方式有很多种原因,第一:双缓冲技术的实现。第二,可移植性。第三,底层调用本身的一些性能方面的缺陷。第四. 阅读全文
posted @ 2013-04-11 17:46 ~风~ 阅读(175) 评论(0) 推荐(0)
摘要:文件是linux中的一个重要概念。在Linux中,一切(几乎一切)都是文件。简单的说,C中基本的的printf()函数,scanf()函数,其实都属于文件操作。对于文件操作,虽然都是通过函数调用的方式实现,却还是能分为两类:系统调用和库函数。这篇文章将先介绍linux中文件的概念,系统调用和库函数的概念 ,然后具体的讨论两种方式下的文件操作。博文的主要内容如下:Linux 中的文件文件访问-库函数文件访问-系统调用库函数标准 I/O 库/proc文件系统1 Linux中的文件1.1概念按照普通的定义,文件不过是一堆数据,在往下说,就是存储器中的0101。。。而我们这里讨论的文件有了更广的定义. 阅读全文
posted @ 2013-04-11 17:40 ~风~ 阅读(160) 评论(0) 推荐(0)
摘要:序linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。Linux则把两者继承了下来,如图示:其中,最初Unix IPC包括:管道、FIFO、信号;System V IPC包括:System V消息队列、System V信号灯、Syst 阅读全文
posted @ 2013-04-11 15:06 ~风~ 阅读(649) 评论(0) 推荐(0)
摘要:unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称。该头文件由 POSIX.1 标准(单一UNIX规范的基础)提出,故所有遵循该标准的操作系统和编译器均应提供该头文件(如 Unix 的所有官方版本,包括 Mac OS X、Linux 等)。对于类 Unix 系统,unistd.h 中所定义的接口通常都是大量针对系统调用的封装(英语:wrapper functions),如 fork、pipe 以及各种 I/O 原语(read、write、close 等等)。类似于 Cygwin 和 MinGW 的 Unix 兼容层也提供相应版本. 阅读全文
posted @ 2013-04-11 10:59 ~风~ 阅读(2824) 评论(0) 推荐(0)
摘要:1. Linux系统调用原理2. 系统调用的实现3. Linux系统调用分类及列表4.系统调用、用户编程接口(API)、系统命令和内核函数的关系5. Linux系统调用实例6. Linux自定义系统调用1.系统调用原理系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把 阅读全文
posted @ 2013-04-11 10:44 ~风~ 阅读(1581) 评论(0) 推荐(1)
摘要:什么是系统调用?Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数调用非常相似。区别仅仅在于,系统调用由操作系统核心提供,运行于核心态;而普通的函数调用由函数库或用户自己提供,运行于用户态。二者在使用方式上也有相似之处,在下面将会提到。随Linux核心还提供了一些C语言函数库,这些库对系统调用进行了一些包装和扩展,因为这些库函数与系统调用的关系非常紧密,所以习惯上把这些函数也称为系统调用。Linux中共有多少个系统调用?这个问题可不太好回答,就算让Linus Torvaldz本人也不见. 阅读全文
posted @ 2013-04-11 10:41 ~风~ 阅读(419) 评论(0) 推荐(0)
摘要:当我们看恐怖片时,经常会有这样的场景:当一个人被鬼上身后,这个人的身体表面上还和以前一样,但是他的灵魂和思想已经被这个鬼占有了,因此它会控制这个人做他自己想做的事情--那么在进程中也有这样的情景。那么是如何实现的呢?现在我们来学习exec()函数族一.exec()函数 族 1. 首先我们在终端输入命令:man exec 可以看到函数的原型:#include <unistd.h>int execl(const char *path, const char *arg, ...);int execv(const char *path, char *const argv[]);int ex 阅读全文
posted @ 2013-04-11 09:27 ~风~ 阅读(796) 评论(0) 推荐(0)
摘要:随着一句fork,一个新进程呱呱落地,但它这时只是老进程的一个克隆。然后随着exec,新进程脱胎换骨,离家独立,开始了为人民服务的职业生涯。人有生老病死,进程也一样,它可以是自然死亡,即运行到main函数的最后一个”}”,从容地离我们而去;也可以是自杀,自杀有2种方式,一种 是调用 exit函数,一种是在main函数内使用return,无论哪一种方式,它都可以留下遗书,放在返回值里保留下来;它还甚至能可被谋杀,被其它进程通过 另外一些方式结束他的生命。进程死掉以后,会留下一具僵尸,wait和waitpid充当了殓尸工,把僵尸推去火化,使其最终归于无形。系统中的僵尸进程都要由wait系统调用来. 阅读全文
posted @ 2013-04-10 18:38 ~风~ 阅读(552) 评论(0) 推荐(0)
摘要:前面已经谈了内核加载与系统引导过程,下面我们来看看内核的 do_fork() 函数是如何创建一个新的进程的。在 Linux 内核中,供用户创建进程的系统调用fork()函数的响应函数是 sys_fork()、sys_clone()、sys_vfork()。这三个函数都是通过调用内核函数 do_fork() 来实现的。根据调用时所使用的 clone_flags 参数不同,do_fork() 函数完成的工作也各异。这部分内容简单,我不打算就此而展开分析。下面我们重点来讲解以下 do_fork() 函数的工作原理。我们知道 do_fork() 函数生成一个新的进程,大致分为三个步骤。1、建立进程控. 阅读全文
posted @ 2013-04-10 17:51 ~风~ 阅读(612) 评论(0) 推荐(0)
摘要:一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。 我们来看一个例子:[cpp] view plaincopyprint?/* * fork_test.c * version 1 * Created on: 2010-5-29 *... 阅读全文
posted @ 2013-04-10 16:43 ~风~ 阅读(307) 评论(0) 推荐(0)
摘要:文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或creat返回的文件描述符标识该文件,将其作为参数传递给read或write。 按照惯例,UNIX系统shell使用文件描述符0与进程的标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与标准出错相关联。这是各种shell以及很多应用程序使用的惯例,而与UNIX内核无关,如果不遵守这种惯例,那么很多UNIX系统应用程序就不能正常工作。 在依从POSIX的应用程序中,幻数0、1、2应当替换成符号常量 阅读全文
posted @ 2013-04-10 10:26 ~风~ 阅读(871) 评论(0) 推荐(0)
摘要:常用的内置命令忽略,来看看shell编程中其他一些重要的内置命令: 1、help:显示所有内置命令列表,或显示一个具体命令的用法。 -s: 表示列出命令的语法格式 例子:help -s helphelp: help [-dms] [pattern ...]2、echo:用来显示一行文字。默认自动换行。 -n:取消自动换行。 -e:让字符串中的特殊字符起作用。 例子:echo hello world 或 echo 'hello world' 或 echo "hello world" 输出结果为:hello world echo -e "hello \ 阅读全文
posted @ 2013-03-29 22:29 ~风~ 阅读(523) 评论(0) 推荐(0)
摘要:linux下查看和添加PATH环境变量来自:http://apps.hi.baidu.com/share/detail/32942984$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。编辑你的 PATH 声明,其格式为:PATH=$PATH:<PATH1>:<PATH 2>:<PATH 3>:------:<PATH N>你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:$ source 阅读全文
posted @ 2013-03-29 22:04 ~风~ 阅读(312) 评论(0) 推荐(0)
摘要:遇到了点命令,乍一看,没明白怎么回事,但隐约觉得应该类似C语言中的#include。接着搜索,找到了一些资料,总结如下。1 shell脚本执行方法 有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。 新产生一个shell然后再执行scripts的方法是在scripts文件开头加入语句:#!/bin/sh。一般的script文件(.sh)即是这种用法。这种方法先启用新的sub-shell(新的子进程),然后在其下执行命令。 另外一种方法就是上面说过的source命令,不再产生新的. 阅读全文
posted @ 2013-03-29 21:30 ~风~ 阅读(541) 评论(0) 推荐(0)
摘要:《Linux 程序设计》是一本非常好的书,内容很全面,并且对于给出的例子都进行了详细的讲解。并且是通过一个的小型的项目的来讲解的:开始是使用shell进行编程实现,然后逐步进行改进,使用C语言实现,使用ncurses库实现,改用dbm数据库,改用MySQL数据库,添加套接字,最后是使用GTK和Qt添加了图形界面,所以非常的值得仔细的看。第1章 入门1. 什么是UNIX2. GNU项目3. linux程序第2章 shell程序设计1. 内部命令与外部命令2. exec命令第3章 文件操作1.unix和linux中比较重要的设备2. 系统调用与设备驱动程序2.库函数3. write与read系统调 阅读全文
posted @ 2013-03-29 17:12 ~风~ 阅读(251) 评论(0) 推荐(0)