Linux系统编程
文章平均质量分 65
cany1000
码农。无所谓,像蜗牛一点一点爬。
展开
-
进程创建-fork
fork函数:创建一个新进程,需要包含下面的头文件#include #include pid_t fork(void);功能:fork()函数用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。返回值: >> 成功:子进程中返回0,父进程中返回子进程ID。 >> 失败:返回-1.说明:使用fork函数得到的子进程是父原创 2018-02-01 15:01:07 · 1384 阅读 · 2 评论 -
进程控制块和进程号
进程控制块PCB - process control block进程号pid唯一的标识了一个进程。>> OS是根据PCB来对并发执行的进程进行控制和管理的。系统在创建一个进程的时候会开辟一段内存空间存放与此进程相关的PCB数据结构。>> PCB是操作系统中最重要的记录型数据结构。PCB中记录了用于描述进程进展情况及控制进程运行所需的全部信息。>> PCB是进程存...原创 2018-02-01 15:18:53 · 916 阅读 · 0 评论 -
Linux系统编程 - 写缓冲和sleep
缓冲----行缓冲:标准C库的输入输出函数,向屏幕(标准输出)写东西的时候是行缓冲的。Write系统函数,无缓冲使用库函数往屏幕上写东西时是行缓冲。系统调用是无缓冲的。>> 也就是输出的内容会存在缓冲区里,直到缓冲区里有‘\n’才刷新缓冲区。>> 或者调用fflush(stdout)人为的刷新缓冲区。>> 程序结束了也会刷新缓冲区。>> 缓冲区满了,也会刷新缓冲区。-原创 2018-02-02 16:16:17 · 416 阅读 · 3 评论 -
Linux系统编程 - 孤儿进程和僵尸进程
1)孤儿进程(Orphan Process):父进程已亡,即父进程运行结束,但是子进程未结束的进程。孤儿进程的父进程是1号进程-即init进程。父进程死亡之后终端释放。此时不能用ctrl-c结束进程。#include <sys/wait.h>#include <sys/types.h>#include <unistd.h>#include <stdi...原创 2018-02-02 11:03:25 · 288 阅读 · 1 评论 -
等待子进程结束wait()和waitpid()
父子进程有时需要简单的进程间同步,如父进程等待子进程的结束。linux提供了以下两个等待函数:wait(),waitpid().需要包含头文件:#include <sys/types.h>#include <sys/wait.h>1) pid_t wait(int *status);功能:等待任一子进程终止,如果子进程终止了,此函数会回收子进程的资源。调用wait函数的进...原创 2018-02-02 15:07:12 · 13394 阅读 · 0 评论 -
文件描述符
文件描述符概述:1)文件描述符是非负整数 >=0,是文件的标识。2)用户使用文件描述符(file descriptor)来访问文件。3)利用open打开一个文件时,内核会返回一个文件描述符。每个进程都有一张文件描述符的表,进程刚被创建时,标准输入、标准输出、标准错误输出设备文件被打开,对应的文件描述符0、1、2记录在表中。在进程中打开其他文件时,系统会返回文件描述符表中最小可用的文件描述符,...原创 2018-03-01 14:20:11 · 447 阅读 · 0 评论 -
聊天软件-管道实现
carie和vally之间的对话talk_carie.c如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <sys...原创 2018-03-01 20:57:43 · 331 阅读 · 0 评论 -
系统编程 - kill,alarm,read,write
3、自己实现文件的拷贝cp。1、父进程杀死子进程。原创 2024-06-14 18:38:56 · 202 阅读 · 0 评论 -
fcntl函数
编程时可通过fcntl函数设置文件的阻塞特性。设置为阻塞:fcntl(fd,F_SETFL,0);设置为非阻塞:fcntl(fd,F_SETFL,O_NONBLOCK);fcntl -- manipulate file descriptorint fcntl(int fd, int cmd,.../*arg*/);cmd:F_GETFD(void):read the file descriptor...原创 2018-03-01 14:02:13 · 1379 阅读 · 0 评论 -
消息队列
消息队列是消息的链表(不是文件),存放在内存中,由内核维护。消息队列的特点:---- 消息队列中的消息是有类型的。(读取的时候可以根据消息的类型读取消息,没有必要先进先出)---- 消息队列中的消息是有格式的。---- 消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取。---- 消息队列允许一个或多个进程向它写入或者读取消息。---- 与无名管道、命名管...原创 2018-03-05 16:40:40 · 575 阅读 · 0 评论 -
Flash磨损均衡技术解析(wear-leveling)
1、命令的传输传输层接收到来自于应用层的命令请求后,根据命令的不同将相关寄存器中的信息按照SATA标准协议规定的格式封装为FIS传递给数据链路层。当数据链路层成功接收后,向传输层反馈一个传输完成的状态标志。传输层接收到来自数据链路层的FIS后,判断该FIS是否有效以及类型。如果是有效的类型,则按照SATA标准协议规定格式进行解析,并将其中的数据映射到对应的寄存器中,然后通知应用层更新相应寄存器的值...原创 2018-03-06 14:39:25 · 13655 阅读 · 0 评论 -
管道-命名管道(FIFO)
命名管道(FIFO)和管道(pipe)基本相同,但也有一些不同的地方:1)FIFO在文件系统中作为一个特殊的文件而存在,但FIFO中的内容却存放在内存中。(某个目录下有一个文件名)2)当使用FIFO的进程退出后,FIFO文件将继续保存在文件系统中以便以后使用。3)FIFO有名字,不相关的进程可以通过打开命名管道进行通信。FIFO文件的创建#include <sys/types.h>#i...原创 2018-02-28 17:41:37 · 1290 阅读 · 1 评论 -
复制文件描述符dup和dup2
文件描述符的复制:dup和dup2是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。>> int dup(int oldfd);>> int dup2(int oldfd,int newfd);dup和dup2经常用来重定向进程的stdin,stdout和strerr。如:ls > log.txt 将ls的输出信...原创 2018-02-27 17:51:41 · 1478 阅读 · 0 评论 -
IPC和Kill
进程间通信(IPC:Inter Processes Communication)进程是一个独立的资源分配单元,不同进程(通常指用户进程)之间的资源是独立的,没有关联。不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)进程不是孤立的,不同的进程需要进程信息的交互和状态的传递等,因此需要进程间通信。>> 进程间通信功能:1)数据传输:一个进程需要将它的数据发送给另一个原创 2018-02-05 16:17:35 · 369 阅读 · 0 评论 -
管道-无名管道
管道(pipe)概述:(怎样使用管道实现父子进程间通信)不相关的两个进程无法通过无名管道进行进程间通信。管道又称无名管道(没有名字),无名管道是一种特殊类型的文件,在应用层体现为两个打开的文件描述符。管道是最古老的UNIX IPC方式,其特点是:1> 半双工,数据在同一时刻只能在一个方向上流动。(单工-收音机)2> 数据只能从管道的一端写入,从另一端读出。3> 写入管...原创 2018-02-12 15:19:42 · 655 阅读 · 0 评论 -
可重入函数和信号集
--- 可重入函数:可重入函数是指函数可以由多个任务并发使用,而不必担心数据错误。编写可重入函数:>>不使用(返回)静态的数据、全局变量(除非用信号量互斥)>>不调用动态内存分配、释放函数。>>不调用任何不可重入的函数(如标准I/O函数)注:即使信号处理函数使用的都是可重入函数,也要注意进入处理函数时,首先要保存errno的值,结束时,再恢复原值。因为信号处理过...原创 2018-02-11 16:17:31 · 343 阅读 · 0 评论 -
信号-signal
1、Kill:调用kill函数终止进程#include <sys/types.h>#include <signal.h>int kill(pid_t pid, int signum);功能:给指定的进程发送编号为signum的信号。返回值:成功返回0,失败返回-1.>> pid的取值有4种情况:1)pid>0:将信号传送给进程ID为pid的进程。(单个进程...原创 2018-02-06 15:39:04 · 296 阅读 · 0 评论 -
exit和vfork
在linux中,可以用以下函数结束正在运行的进程。>> exit函数—库函数#include <stdlib.h>void exit(int value);参数:value是返回给父进程的参数,低8位有效。>> _exit函数—系统调用#include<unistd.h>void _exit(int value);参数:value是返回给父进程的参数...原创 2018-02-03 18:07:51 · 345 阅读 · 0 评论