07 2013 档案

摘要:一,匿名管道PIPE局限性 管道的主要局限性正体现在它的特点上: 只支持单向数据流; 只能用于具有亲缘关系的进程之间; 没有名字; 管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小); 管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等; 如果... 阅读全文
posted @ 2013-07-16 11:05 mickole 阅读(10735) 评论(0) 推荐(0) 编辑
摘要:一,管道读写规则 当没有数据可读时 O_NONBLOCK disable:read调用阻塞,即进程暂停执行,一直等到有数据来到为止。 O_NONBLOCK enable:read调用返回-1,errno值为EAGAIN。 当管道满的时候 O_NONBLOCK disable: write调用阻塞,直到有进程读走数据 O_NONBLOCK enable:调用返回-1... 阅读全文
posted @ 2013-07-15 23:58 mickole 阅读(10707) 评论(1) 推荐(2) 编辑
摘要:一,什么是管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。 数... 阅读全文
posted @ 2013-07-15 22:01 mickole 阅读(7126) 评论(0) 推荐(0) 编辑
摘要:一,三种时间结构 time_t://seconds struct timeval { long tv_sec; /* seconds */ long tv_usec; /* microseconds */ }; struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ ... 阅读全文
posted @ 2013-07-15 20:59 mickole 阅读(6354) 评论(0) 推荐(0) 编辑
摘要:一些IO系统调用执行时, 如 read 等待输入期间, 如果收到一个信号,系统将中断read, 转而执行信号处理函数. 当信号处理返回后, 系统遇到了一个问题: 是重新开始这个系统调用, 还是让系统调用失败?早期UNIX系统的做法是, 中断系统调用, 并让系统调用失败, 比如read返回 -1, 同时设置 errno 为 EINTR中断了的系统调用是没有完成的调用, 它的失败是临时性的, ... 阅读全文
posted @ 2013-07-15 19:44 mickole 阅读(6725) 评论(0) 推荐(2) 编辑
摘要:一,sigaction() #include int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact)); sigaction函数用于改变进程接收到特定信号后的行为。该函数的第一个参数为信号的值,可以为除SIGKILL及SIGSTOP外的任何一个特定有效的信号(为这两个信号定义自己的处理函... 阅读全文
posted @ 2013-07-15 19:23 mickole 阅读(17091) 评论(1) 推荐(6) 编辑
摘要:一,信号集及相关操作函数 信号集被定义为一种数据类型: typedef struct { unsigned long sig[_NSIG_WORDS]; } sigset_t 信号集用来描述信号的集合,每个信号占用一位(64位)。Linux所支持的所有信号可以全部或部分的出现在信号集中,主要与信号阻塞相关函数配合使用。下面是为信号集操作定义的相关函数: #include int sigempt... 阅读全文
posted @ 2013-07-15 15:50 mickole 阅读(9315) 评论(1) 推荐(2) 编辑
摘要:一,alarm() 在将可重入函数之前我们先来了解下alarm()函数使用: #include unsigned int alarm(unsigned int seconds) 系统调用alarm安排内核为调用进程在指定的seconds秒后发出一个SIGALRM的信号。如果指定的参数seconds为0,则不再发送 SIGALRM信号。后一次设定将取消前一次的设定。该调用返回值为上次定时调... 阅读全文
posted @ 2013-07-15 11:30 mickole 阅读(3687) 评论(0) 推荐(0) 编辑
摘要:一,信号安装 如果进程要处理某一信号,那么就要在进程中安装该信号。安装信号主要用来确定信号值及进程针对该信号值的动作之间的映射关系,即进程将要处理哪个信号;该信号被传递给进程时,将执行何种操作。 linux主要有两个函数实现信号的安装:signal()、sigaction()。其中signal()只有两个参数,不支持信号传递信息,主要是用于前32种非实时信号的安装;而sigaction()是较... 阅读全文
posted @ 2013-07-15 10:54 mickole 阅读(6404) 评论(0) 推荐(1) 编辑
摘要:对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段: 信号诞生 信号在进程中注册 信号在进程中的注销 信号处理函数执行 1 信号诞生 信号事件的发生有两个来源:硬件来源(比如我们按下了键盘或者其它硬件故障);软件来源,最常用发送信号的系统函数是kill, raise, alarm和setitimer以及s... 阅读全文
posted @ 2013-07-14 17:16 mickole 阅读(2906) 评论(0) 推荐(0) 编辑
摘要:一,什么是中断? 1.中断的基本概念 中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。引起中断发生的事件被称为中断源。中断源向CPU发出的请求中断处理信号称为中断请求,而CPU收到中断请求后转到相应的事件处理程序称为中断响应。 在有些情况下... 阅读全文
posted @ 2013-07-14 10:35 mickole 阅读(9755) 评论(1) 推荐(6) 编辑
摘要:一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器m... 阅读全文
posted @ 2013-07-13 19:17 mickole 阅读(83792) 评论(7) 推荐(12) 编辑
摘要:一,system()理解 功能:system()函数调用“/bin/sh -c command”执行特定的命令,阻塞当前进程直到command命令执行完毕 原型: int system(const char *command); 返回值: 如果无法启动shell运行命令,system将返回127;出现不能执行system调用的其他错误时返回-1。如果system能够顺利执行,返回那个命令... 阅读全文
posted @ 2013-07-13 13:59 mickole 阅读(35876) 评论(1) 推荐(2) 编辑
摘要:本节目标: 僵进程 SIGCHLD wait waitpid 一,僵尸进程 当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止。 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。 进程表中代表子进程的数据项是不会立... 阅读全文
posted @ 2013-07-13 11:31 mickole 阅读(11209) 评论(0) 推荐(2) 编辑
摘要:本节目标: exec替换进程映像 exec关联函数组(execl、execlp、execle、execv、execvp) 一,exec替换进程映像 在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。 当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,ex... 阅读全文
posted @ 2013-07-12 23:55 mickole 阅读(88575) 评论(6) 推荐(4) 编辑
摘要:一,进程终止有5种方式: 正常退出: 从main函数返回 调用exit 调用_exit 异常退出: 调用abort 由信号终止 二,exit和_exit区别: 关于_exit(): #include void _exit(int status); #include void _Ex... 阅读全文
posted @ 2013-07-12 16:44 mickole 阅读(14840) 评论(0) 推荐(0) 编辑
摘要:本节目标: 复制进程映像 fork系统调用 孤儿进程、僵尸进程 写时复制 一,进程复制(或产生) 使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。 子进程与父进程的区别在于: 1、父进程设置的锁,子进程... 阅读全文
posted @ 2013-07-12 15:43 mickole 阅读(11875) 评论(1) 推荐(3) 编辑
摘要:本节目标: 进程状态变迁 进程控制块 进程创建 进程撤消 终止进程的五种方法 一,进程状态变迁 进程的三种基本状态 就绪(Ready)状态 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。 执行(Running)状态 当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。 阻塞... 阅读全文
posted @ 2013-07-12 11:02 mickole 阅读(7970) 评论(0) 推荐(2) 编辑
摘要:本节目标: 什么是程序 什么是进程 进程数据结构 进程与程序区别与联系 一,什么是程序? 程序是完成特定任务的一系列指令集合 二,什么是进程? 从用户的角度来看进程是程序的一次动态执行过程 从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。 进程是资源分配的最小单位 每一个进程都有自己独立的地址空间与执... 阅读全文
posted @ 2013-07-12 09:45 mickole 阅读(3544) 评论(0) 推荐(2) 编辑
摘要:本节目标:1,文件共享打开文件内核数据结构一个进程两次打开同一个文件两个进程打开同一个文件2,复制文件描述符(dup、dup2、fcntl)一,文件共享1,一个进程打开两个文件内核数据结构说明:文件描述符表:每个进程都有一张,彼此独立,每个文件描述符表项都指向一个文件表,文件描述符0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),默认已经打开,分别表示:标准输入,标准输出,标准错误设备。文件表:每打开一个文件就对应一张文件表,文件表可以共享,当多个文件描述符指向同一个文件表时,文件表中的refcnt字段会相应变化。文件状态标识:文件的打开模式( 阅读全文
posted @ 2013-07-11 16:40 mickole 阅读(1862) 评论(0) 推荐(0) 编辑
摘要:从系统时钟获取时间方式time函数介绍:1、函数名称: localtime2、函数名称: asctime3、函数名称: ctime4、函数名称: difftime5、函数名称: gmtime6、函数名称: time7、函数名称: tzsettime.h是C/C++中的日期和时间头文件。代码示例# include #include int main(void){time_t timer =time(NULL);printf("ctime is %s\n",ctime(&timer)); //得到日历时间return 0;}从系统时钟获取时间方式time_t time( 阅读全文
posted @ 2013-07-11 00:50 mickole 阅读(866) 评论(0) 推荐(0) 编辑
摘要:本文利用以下系统调用实现ls -l命令的功能:1,lstat:获得文件状态,2,getpwuid:#include struct passwd *getpwuid(uid_t uid);描述:The getpwuid() function returns a pointer to a structure containing the broken-out fields of the record in the password database that matches the user ID uid.返回值: The passwd structure is defined in as fo. 阅读全文
posted @ 2013-07-10 22:21 mickole 阅读(3027) 评论(0) 推荐(0) 编辑
摘要:一、stat()获取文件元数据stat系统调用原型: #include int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *path, struct stat *buf);帮助信息可通过:man 2 stat 查看DESCRIPTION These functions return information about a file. No permissions are required on the file i... 阅读全文
posted @ 2013-07-10 17:04 mickole 阅读(2511) 评论(0) 推荐(0) 编辑
摘要:1. 目录操作相关的系统调用 1.1 mkdir和rmdir系统调用 1.1.1 实例 1.2 chdir, getcwd系统调用 1.2.1 实例 1.3 opendir, closedir, readdir, 1.3.1 实例:递归便利目录 1. 目录操作相关的系统调用 1.1 mkdir和rmdir系统调用 [code] filename: mk_rm_dir.c #include int mkdir(const char *path, mode_t mode); return: S 0 ... 阅读全文
posted @ 2013-07-10 15:07 mickole 阅读(1546) 评论(0) 推荐(0) 编辑
摘要:一、lseek()系统调用功能说明:通过指定相对于开始位置、当前位置或末尾位置的字节数来重定位 curp,这取决于 lseek() 函数中指定的位置函数原型:#include #include off_t lseek(int fd, off_t offset, int whence);参数说明:fd:文件描述符offset:偏移量,该值可正可负,负值为向前移whence:搜索的起始位置,有三个选项:(1).SEEK_SET: 当前位置为文件的开头,新位置为偏移量大小 (2).SEEK_CUR: 当前位置为文件指针位置,新位置为当前位置加上偏移量大小 (3).SEEK_END: 当... 阅读全文
posted @ 2013-07-10 13:45 mickole 阅读(3042) 评论(1) 推荐(0) 编辑
摘要:5.4. Enabling and Disabling SELinux Use the /usr/sbin/getenforce or /usr/sbin/sestatus commands to check the status of SELinux. Thegetenforce command returns Enforcing, Permissive, or Disabled. Th... 阅读全文
posted @ 2013-07-10 11:03 mickole 阅读(3023) 评论(0) 推荐(0) 编辑
摘要:一、vsftp服务能开启却连接不上的解决办法: 用虚拟机装了centos,vsftp是用centos自带的。启动vsftd服务后却一直连不上,原因是被防火墙给挡了。 查看防火墙状态:/etc/init.d/iptables status 停掉防火墙:/etc/init.d/iptables stop 也可以永久关闭防火墙:chkconfig --level 35 ipt... 阅读全文
posted @ 2013-07-10 10:54 mickole 阅读(1024) 评论(0) 推荐(0) 编辑
摘要:read系统调用一旦有了与一个打开文件描述相连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节函数原型:#include ssize_t read(int fd, void *buf, size_t count);参数fd :想要读的文件的文件描述符buf : 指向内存块的指针,从文件中读取来的字节放到这个内存块中count : 从该文件复制到buf中的字节个数返回值如果出现错误,返回-1读文件结束,返回0否则返回从该文件复制到规定的缓冲区中的字节数否则返回从该文件复制到规定的缓冲区中的字节数write系统调用用write() 阅读全文
posted @ 2013-07-10 00:04 mickole 阅读(2932) 评论(0) 推荐(0) 编辑
摘要:1,在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。errno这个全局变量在头文件中声明如下:extern int errno;errno是一个由POSIX和ISO C标准定义的符号,看(用)起来就好像是一个整形变量。当系统调用或库函数发生错误的时候,比如以只读方式打开一个不存在的文件时,它的值将会被改变,根据errno值的不同,我们就可以知道自己的程序发生了什么错误,然后进行相应的处理。为什么,要强调errno看起来好像是一个整形变量呢?因为有的标准(如ISO C)只规定了errno的作用,而没有规定它的实现方式,它可能被定义成一个变量,也有可能被定义成一个宏,这个 阅读全文
posted @ 2013-07-09 23:16 mickole 阅读(7808) 评论(1) 推荐(3) 编辑
摘要:什么是IO?输入/输出是主存和外部设备之间拷贝数据的过程 设备->内存(输入操作) 内存->设备(输出操作)高级I/O ANSI C提供的标准I/O库称为高级I/O,通常也称为带缓冲的I/O低级I/O 通常也称为不带缓冲的I/O2. 文件描述符:fd对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息。一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOU 阅读全文
posted @ 2013-07-09 23:09 mickole 阅读(5291) 评论(1) 推荐(3) 编辑

点击右上角即可分享
微信分享提示