
Linux系统编程
文章平均质量分 83
Tianttt
这个作者很懒,什么都没留下…
展开
-
三、Linux系统编程-文件和IO(一)文件的打开和关闭
一、什么是I/O输入/输出是主存和外部设备之间拷贝数据的过程设备->内存(输入操作)内存->设备(输出操作)高级I/O:ANSI C提供的标准I/O库称为高级I/O,通常也称为带缓冲的I/O低级I/O:通常也称为不带缓冲的I/O二、文件描述符对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核原创 2015-03-04 22:37:53 · 641 阅读 · 0 评论 -
十六、Linux系统编程-信号(三)其他信号发送函数、可重入及不可重入函数
一、更多信号发送函数(1)、alarm 发送时钟信号函数声明:函数参数:返回值:(2)、setitimer(3)、abort二、可重入函数与不可重入函数三、不可重入函数示例原创 2015-03-30 20:08:48 · 912 阅读 · 0 评论 -
七、Linux系统编程-文件和IO(五)fcntl函数及常用操作、文件锁
一、fcntl函数及常用操作(1)、函数声明二、文件锁原创 2015-03-12 23:03:27 · 531 阅读 · 0 评论 -
八、Linux系统编程-进程(一)进程概念、进程数据结构、进程状态变迁、进程创建和撤销
一、什么是进程从用户角度来说,进程是程序的一次动态执行过程;从操作系统的核心来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位。每一个进程都有自己独立的地址空间与执行状态。二、进程数据结构进程包含以下结构:代码段+数据段+堆栈段+PCBPCB(进程控制块):用于描述进程情况及控制进程运行所需的全部信息。q进程描述信息q进程标识符用于唯一的标识一个进原创 2015-03-14 11:27:42 · 1647 阅读 · 0 评论 -
十八、Linux系统编程-信号(五)sigaction和sigqueue
一、sigaction函数函数声明:#include int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);函数参数:该函数的第一个参数为信号的值,可以为除SIGKILL及SIGSTOP外的任何一个特定有效的信号(为这两个信号定义自己的处理函数,将导致信号安装错误)第原创 2015-03-31 15:57:26 · 627 阅读 · 1 评论 -
十七、Linux系统编程-信号(四)信号在内核中表示、信号的阻塞和未决
一、信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示如下:原创 2015-03-31 11:24:27 · 561 阅读 · 0 评论 -
十九、Linux系统编程-信号(六)三种不同精度的睡眠sleep、usleep、nanosleep
一、三种不同精度的睡眠声明:#include unsigned int sleep(unsigned int seconds);二、三种时间结构三、setitimer四、getitimer原创 2015-04-11 15:26:28 · 2516 阅读 · 0 评论 -
二十、Linux系统编程-管道(一)管道、匿名管道、管道读写规则
一、管道概念:管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”,管道本质上是内核中一块固定大小的缓冲区。管道限制:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信;通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间原创 2015-04-11 15:45:13 · 720 阅读 · 0 评论 -
二十一、Linux系统编程-管道(二)命名管道(FIFO)、匿名管道与命名管道区别、命名管道的打开规则
一、命名管道(FIFO) 创建匿名管道实际上是创建一个64K大小的内存缓冲区,匿名管道的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特殊类型的文件。函数声明:#include #include int mkfifo(const char *p原创 2015-04-19 18:09:22 · 1720 阅读 · 0 评论 -
十五、Linux系统编程-信号(二)信号分类、可靠信号与不可靠信号、信号发送 pause
一、信号分类(1)、可靠信号不可靠信号linux信号机制基本上是从unix系统中继承过来的。早期unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是:进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。早期原创 2015-03-30 17:25:43 · 842 阅读 · 0 评论 -
六、Linux系统编程-文件和IO(四)文件共享、复制文件描述符
一、文件共享每个进程都有一个自己的文件描述符表。在一个进程中,一个文件被打开之后,会分配一个文件描述符,一个文件表表项,一个v节点表。其中文件表保存文件状态,包括:读、写、追加、同步、非阻塞等。其中文件表项是不能共享的,文件被打开一次,就会分配一个文件表项;v节点表示可以共享的,两个不同的文件表项可以指向同一个v节点表。(1)、一个进程打开两个文件模型:(2)、一个进程两次打开原创 2015-03-10 22:13:40 · 19517 阅读 · 0 评论 -
九、Linux系统编程-进程(二)fork系统调用、复制进程映像、写时复制、孤儿进程和僵尸进程
一、fork系统调用(1)、函数功能:创建一个进程(2)、声明:#include pid_t fork(void);(3)返回值:成功父进程返回子进程PID,子进程返回返回0,失败返回-1。fork系统调用之后,父子进程交替执行。如果父进程先退出,那么子进程的父进程将变为init进程。(注:除了0进程,任何一个进程都必须有父进程)如果子进程先退出,那么子进程必须等到父原创 2015-03-14 13:11:52 · 684 阅读 · 0 评论 -
十、Linux系统编程-进程(三)父子进程共享文件、fork和vfork、exit和_exit、atexit注册退出事件
一、fork之后父子进程共享文件打开的文件在fork之后共享文件表。示例:#include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perr原创 2015-03-15 22:45:10 · 973 阅读 · 0 评论 -
十一、Linux系统编程-进程(四)替换进程映像exe函数族
一、exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。(1)、声明:#include int execve(const char *filen原创 2015-03-16 21:40:29 · 940 阅读 · 0 评论 -
四、Linux系统编程-文件和IO(二)文件的读写
一、read、write函数声明:#include ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);二、lseek三、目录访问(opendir、readdir、closedir)四、rmdir、mkdir五、chm原创 2015-03-08 17:59:37 · 654 阅读 · 0 评论 -
十三、Linux系统编程-进程(六)进程组、会话期、守护进程
一、什么是守护进程守护进程是在后台运行不受控端控制的进程,通常情况下守护进程在系统启动时自动运行守护进程的名称通常以d结尾,比如sshd、xinetd、crond等。二、守护进程的创建步骤三、daemon原创 2015-03-27 21:22:52 · 649 阅读 · 0 评论 -
十四、Linux系统编程-信号(一)中断、信号、中断和信号
一、中断(1)、中断概念 中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。最初引入硬件中断,只是出于性能上的考量。如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量处理器周期被浪费。引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务原创 2015-03-28 12:45:43 · 2360 阅读 · 0 评论 -
五、Linux系统编程-文件和IO(三)文件元数据的获取
一、读取文件元数据(1)、函数功能:获取文件元数据(2)、函数声明:#include #include #include int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char *path, struct stat *buf);原创 2015-03-09 20:32:24 · 1299 阅读 · 0 评论 -
十二、Linux系统编程-进程(五)SIGCHLD、wait、waitpid、system
一、SIGCHLD当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止)子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。父进程查询子进程的退出状态可以用wait/waitpid函数二、wait和waitpid(1)、函数原原创 2015-03-17 23:39:36 · 736 阅读 · 0 评论 -
六、Linux网络编程-socket、套接字地址结构、地址转换、字节序、套接字类型
socket介绍 socket可以看成是用户进程与内核网络协议栈的编程接口。它屏蔽了底层通信的细节,让我们更方便的通信。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。套接口地址结构IPv4地址结构IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件中struct原创 2015-05-05 20:14:47 · 1272 阅读 · 0 评论