随笔分类 -  UNIX C

1
UNIX \ LINUX 环境下,高级C语言编程
摘要:1.创建IPC对象 2.创建、获取共享内存 3.加载共享内存 4.卸载共享内存 5.销毁/控制共享内存 6.消息队列 创建/获取消息队列 发送消息 接收消息 销毁或控制消息队列 7.信号量 创建\获取信号量集 操作信号量集 销毁\控制信号量集 阅读全文
posted @ 2017-11-09 19:06 Kernel001 阅读(275) 评论(0) 推荐(0) 编辑
摘要:1.信号处理 2.信号处理函数 3.调用函数发送信号 杀死进程信号 向调用进程发送信号 4.暂停 5.睡眠 sleep(seconds) usleep 6.闹钟 alarm 7.信号集 填满信号集 清空信号集 加入信号 删除信号 判断信号是否在信号集中 8.信号屏蔽 信号掩码 获取调用进程的未决信号 阅读全文
posted @ 2017-11-09 11:47 Kernel001 阅读(209) 评论(0) 推荐(0) 编辑
摘要:1.获取进程ID 2.获取实际用户ID和实际用户组ID 3.有效用户ID和有效组ID 4.进程创建 5.进程正常退出 exit退出处理函数 _exit()和_Exit() 6.遗言函数 7.异常终止进程 8.进程回收处理 wait waitpid 9.exec在一个进程上创建新的进程,但pid会不变 阅读全文
posted @ 2017-11-08 19:52 Kernel001 阅读(175) 评论(0) 推荐(0) 编辑
摘要:1.文件访问测试 测试调用进程对指定文件是否拥有足够的访问权限 2.权限掩码: 设置调用进程的权限掩码: 3.修改文件权限 修改指定文件的权限: 4.修改文件大小 指定文件的大小: 5.内存映射文件 建立虚拟内存到物理内存或文件的映射 6.解除虚拟内存到物理内存或文件的映射 7.文件硬链接 创建一个 阅读全文
posted @ 2017-11-08 00:35 Kernel001 阅读(214) 评论(0) 推荐(0) 编辑
摘要:一、线程同步 条件变量 什么是条件变量? 线程A等待某个条件成立,条件成立,线程A才继续向下执行。线程B的执行使条件成立,条件成立以后唤醒线程A,以继续执行。这个条件就是条件变量。 pthread_cond_t 类型 就是条件变量的类型 对类型的封装如下: #include //条件变量的静态初始化 pthread_cond_t cond = PTHREAD_COND_INITIALI... 阅读全文
posted @ 2017-10-25 21:59 Kernel001 阅读(263) 评论(0) 推荐(0) 编辑
摘要:一、基于UDP的网络编程模型 服务器端 1、创建socket. 2、将fd和服务器的ip地址和端口号绑定 3、recvfrom阻塞等待接收客户端数据 4、业务处理 5、响应客户端 客户端: 1、创建socket 2、向服务器发送数据sendto 3、阻塞等待服务器的响应信息 4、处理响应信息 5、断开通讯 #include #include ssize_t recvfrom(int s... 阅读全文
posted @ 2017-10-25 21:58 Kernel001 阅读(415) 评论(0) 推荐(0) 编辑
摘要:一、基于TCP传输层的编程模型 TCP是面向连接的,安全可靠的。 三次握手 服务器端编程模型 1、创建一个用于网络通讯的设备 通讯端点 socket(2) #include #include int socket(int domain, int type, int protocol); 功能:创建一个用于通讯的端点 参数: domain: AF_INET:应用于IPV4地址家族的 AF_I... 阅读全文
posted @ 2017-10-25 21:57 Kernel001 阅读(226) 评论(0) 推荐(0) 编辑
摘要:一、共享内存 1、获取一个键值 ftok(3) 2、使用键值获取共享内存的id shmget(2) #include #include int shmget(key_t key, size_t size, int shmflg); 功能:分配一块共享内存段。获取和key值相关的共享内存段的id。 参数: key:ftok(3)的返回值 size:指定了共享内存段的尺寸 shmflg:... 阅读全文
posted @ 2017-10-25 21:56 Kernel001 阅读(393) 评论(0) 推荐(0) 编辑
摘要:一、pause(2)的使用 #include int pause(void); 功能:等待信号的到来 返回值: -1 错误 errno被设置 只有在信号处理函数执行完毕的时候才返回。 利用所学的知识,编码实现sleep函数的功能。 unsigned int psleep(unsigned int seconds); 代码参见 psleep.c 二、信号从产生到处理的全过程 1、... 阅读全文
posted @ 2017-10-25 21:55 Kernel001 阅读(259) 评论(0) 推荐(0) 编辑
摘要:一、管道 管道分为两种: 无名管道 有名管道 无名管道用于具有亲缘关系的进程间通讯。无名管道是单工的。 有内核管理的一块内存空间。 使用管道,系统提供了pipe(2) #include int pipe(int pipefd[2]); 功能:创建管道 参数: pipefd[2]:用于返回管道的两端。pipefd[0]指向管道的读端。 pipefd[1]指向管道的写端。 返回值: 0... 阅读全文
posted @ 2017-10-25 21:52 Kernel001 阅读(263) 评论(0) 推荐(0) 编辑
摘要:一、环境变量 bash下的环境变量。 每个进程都默认从父进程继承环境变量 bash本身就是一个程序,这个程序运行的时候,bash进程 可以定义只能之自己这个进程中使用的变量,这种变量称为自定义变量。 用户可以使用 export 环境变量的名字 将自定义变量变为环境变量。环境变量可以被子进程继承。 如何使用程序访问环境变量? 系统维护着一个全局变量 extern char **environ... 阅读全文
posted @ 2017-10-25 21:51 Kernel001 阅读(663) 评论(0) 推荐(0) 编辑
摘要:进程的管理 一、进程的基础 进程和程序的区别 每个进程有自己的pid、PCB 操作系统上运行的所有进程构成一颗树。 如何查看这颗树? pstree(1) 树根进程是init pid是 1 进程间的亲缘关系两种 父子关系 兄弟关系 使用top(1)命令观察进程的状态 使用ps(1)命令也可以查看进程。 二、进程的创建 父进程创建子进程 父进程如何去创建子进程? 父进程调用fork... 阅读全文
posted @ 2017-10-25 21:50 Kernel001 阅读(288) 评论(0) 推荐(0) 编辑
摘要:一、获取文件的元数据(meta data) 通过read write可以对文件的内容进行读写。 但是今天我们要操作的是文件的元数据(文件的属性信息) day08$ls -l hello -rw-rw-r-- 1 tarena tarena 0 8月 9 09:17 hello 文件的类型 文件的权限 文件的硬链接数 属主 属组 文件的大小 时间 文件的链接 分为两种 硬链接和软链接 每... 阅读全文
posted @ 2017-10-25 21:49 Kernel001 阅读(662) 评论(0) 推荐(0) 编辑
摘要:一、lseek(2)重新定位文件的读写位置。 #include #include off_t lseek(int fd, off_t offset, int whence); 功能:重新定位文件读写位置距离文件起始的偏移 参数: fd:指定了具体的文件 offset:偏移 whence: SEEK_SET:offset就是文件的偏移位置 指向文件的头部 SEEK_CUR:代表当前位... 阅读全文
posted @ 2017-10-25 21:47 Kernel001 阅读(261) 评论(0) 推荐(0) 编辑
摘要:一、malloc的实现机制(缓冲机制) 库函数跟系统调用之间的关系 什么是缓冲? 内存分配的原理。 封装 函数A的实现代码中调用了函数B。函数B的功能是函数A主要的功能,这样就说函数A封装了函数B。 举例说明 malloc的实现机制(缓冲) 代码参见malloc.c 080f8-08119 33块 内存管理结束了 二、文件的操作(文件内容的操作) 文件的打开、关闭、读、写、读... 阅读全文
posted @ 2017-10-25 21:46 Kernel001 阅读(424) 评论(0) 推荐(0) 编辑
摘要:一、内存管理(续) 每个进程都有自己独立的4G的虚拟地址空间。 冯.诺伊曼体系结构 哈佛体系结构 section 代码段 只读数据段 栈段 举例说明 数据所属的段。 代码参见 memory.c 如何获取进程自己的pid? getpid(2) #include #include pid_t getpid(void); 功能:获取进程的id 参数: void 返回值: pi... 阅读全文
posted @ 2017-10-25 21:43 Kernel001 阅读(735) 评论(0) 推荐(0) 编辑
摘要:一、程序中的错误处理 在系统中定义了一个全局变量errno。在这个全局变量中存放着系统调用或者库函数出错的信息(错误编号)。然后根据错误编号获取错误信息。 举例说明: 打开一个文件,如果这个文件不存在,查看错误信息。 代码参见 file.c perror(3) strerror(3) #include void perror(const char *s); 功能:输出一条系统的错误消... 阅读全文
posted @ 2017-10-25 21:41 Kernel001 阅读(1052) 评论(0) 推荐(0) 编辑
摘要:一、为类型命名别名 struct node{ int num; struct node *next; }; typedef struct node node_t; node_t n; 使用typedef为类型定义别名。 三个步骤: 1、定义一个类型的变量或常量 2、在第一步的基础上,在最前边加上typedef关键字,这时候,原来的变量或常量就是类型的别名(新类型)。 3、使用新... 阅读全文
posted @ 2017-10-25 21:39 Kernel001 阅读(545) 评论(0) 推荐(0) 编辑
摘要:一、大型软件组织 定义规则,规则就是协议。用户和中介的接口。 软件开发的过程: 定义规则,定义协议。软件为用户提供的功能。 在C语言中使用接口实现。接口就是函数。 两种用户 函数的使用者 函数的实现者 你要站在函数的实现者角度考虑函数。 1、函数要完成的功能 2、需要传递给函数的参数 3、函数的返回值的类型 附加信息 作者: 时间: 将协议的每个部分都要实现,在C语言中如何来表示协议... 阅读全文
posted @ 2017-10-25 21:37 Kernel001 阅读(192) 评论(0) 推荐(0) 编辑
摘要:一、计算机的框架 什么是操作系统?(汽车) 加油系统 油门 用户跟加油子系统交互的窗口。(接口) 方向系统 方向盘 用户跟方向系统的交互接口。 导航系统 。。。 汽车的操作系统有很多的子系统来完成。这些子系统互相协调工作,达到用户的目的。操作简练、效率高、安全性比较高...。 接口 多个子系统 每个子系统负责单一的工作。 操作环境 驾驶员位置 是不是驾驶员直... 阅读全文
posted @ 2017-10-25 21:35 Kernel001 阅读(256) 评论(0) 推荐(0) 编辑

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