unix环境高级编程
文章平均质量分 66
HOVL_C++
这个作者很懒,什么都没留下…
展开
-
用IO多路复用之select与poll/epoll来浅谈网络聊天室
IO多路复用:IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数可以避免同步非阻塞IO模型中轮询等待的问题。select该函数用于监视文件描述符的变化情况–读写或是异常参数:nfds: 通常被设置为select所监听的所有文件描述符中的最大值+1 指定被监听的文件描述符的总数 文件描述符从0开始fd_set: 文件描述符集合 fd_set结构体仅包含一个整数数组,该数组的每个元素的每一位(bit) 标记一个文件描述符原创 2021-09-04 10:32:30 · 330 阅读 · 0 评论 -
哲学家就餐问题---c语言
关键问题:能为每一个哲学家写一段描述其行为的程序,且决不会死锁吗?提示:如果五位哲学家同时拿起左面的叉子,就没有人能够拿到他们各自右面的叉子,于是发生了死锁。如果每位哲学家在拿到左面的叉子后,发现其右面的叉子不可用,那么就先放下左面的叉的,等待一段时间,再重复此过程。可能在某一个瞬间,所有的哲学家都同时拿起左叉,看到右叉不可用,又都放下左叉,等一会儿,又都同时拿起左叉,如此重复下去。虽然程序在不停运行,都无法取得进展,于是发生了活锁。思路:解决问题的关键在于,必须保证任意一位哲学家只有.原创 2021-09-02 19:08:48 · 1905 阅读 · 1 评论 -
unix环境高级编程c语言---线程竞争与同步
线程竞争在多线程的环境里,如果共享资源没有上锁,将会出现共享数据混乱的情况。在单核CPU系统里,系统以时间片调度的方式让多个程序轮流使用处理器,造成了【并发】的假象。线程同步互斥量int pthread_mutex_init (pthread_mutex_t* mutex,const pthread_mutexattr_t* mutexattr);//亦可 pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int pthread_mu原创 2021-09-02 18:37:37 · 169 阅读 · 0 评论 -
unix环境高级编程c语言---线程管理
线程管理线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Wi原创 2021-08-30 08:47:53 · 257 阅读 · 0 评论 -
unix环境高级编程c语言---网络通信
网络通信基于TCP协议TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。服务器#include <stdio.h>#include <stdlib.h>#include <原创 2021-08-24 08:48:37 · 120 阅读 · 0 评论 -
UNIX环境高级编程c语言---本地通信
网络通信参数:AF_UNIX/AF_LOCAL/AF_FILE: 本地通信(进程间通信);AF_INET: 基于TCP/IPv4(32位IP地址)的网络通信;AF_INET6: 基于TCP/IPv6(128位IP地址)的网络通信;AF_PACKET: 基于底层包接口的网络通信。type - 通信协议,取值:SOCK_STREAM: 数据流协议,即TCP协议;SOCK_DGRAM: 数据报协议,即UDP协议。protocol - 特别通信协议,一般不用,置0即可。成功返回套接字原创 2021-08-22 09:24:51 · 214 阅读 · 0 评论 -
ISO/OSI七层网络协议模型 VS TCP/IP四层模型
ISO/OSI七层网络协议模型上三层:为用户提供服务下四层:提供数据传输服务应用层应用层位于物联网三层结构中的最顶层,其功能为"处理",即通过云计算平台进行信息处理。应用层与最低端的感知层一起,是物联网的显著特征和核心所在,应用层可以对感知层采集数据进行计算、处理和知识挖掘,从而实现对物理世界的实时控制、精确管理和科学决策。解释: 实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等原创 2021-08-19 21:44:47 · 503 阅读 · 0 评论 -
unix 环境高级编程 c语言 --- 进程间通信5种方式汇总
何为进程间通信进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。另外,系统空间是"公共场所",各进程均可以访问,所以内核也可以提供这样的条件。此外,还有双方都可以访问的外设。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过"注册表"或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作"进程间通信"。分类1 简单进程间通原创 2021-08-17 14:21:06 · 621 阅读 · 0 评论 -
unix 环境高级编程c语言---信号处理
常见信号信号的来源信号的来源1.硬件异常:除0、无效内存访问等。 这些异常通常被硬件(驱动)检测到,并通知系统内核。 系统内核再向引发这些异常的进程递送相应的信号。2. 软件异常:通过kill/raise/alarm/setitimer/sigqueue函数产生的信号。signal#include <stdio.h>#include <unistd.h>#include <signal.h>//信号处理函数 当接收对应的信号时 执行的代码v原创 2021-08-16 12:06:18 · 231 阅读 · 0 评论 -
unix环境高级编程消息队列应用---本地银行C语言
本地银行结构体 account.h#ifndef _ACCOUNT_H__#define _ACCOUNT_H__//客户端 操作 一个操作对应一个消息类型 服务器返回同样的消息类型enum OPER{OPEN=1,LOGIN,GETM,SAVEM,MOVEM,PASS,CHECK,DEST,QUIT};#define CARD_NO_LEN 16#define PASS_LEN 6#define NAME_LEN 48#define ID_LEN 18#define TEL_L原创 2021-08-12 20:53:44 · 252 阅读 · 0 评论 -
unix环境高级编程c语言----进程管理fork()
进程 VS 程序进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的原创 2021-08-11 14:59:32 · 231 阅读 · 0 评论 -
unix环境高级编程---文件锁---c语言
文件锁文件锁定是一种机制,强制访问计算机文件只能由一个用户或在任何特定时间的过程。锁定的目的是要防止的恶意更新场景。调解更新的问题包括如下情况:1.一个进程读取从一个文件包含帐户信息,包括客户的帐户余额和电话号码的客户记录。2.进程B读取相同的文件相同的记录,所以它有它自己的拷贝。3.进程A在其客户记录副本的帐户余额的变化,并记录写回文件。4.进程B - 仍然有原始陈旧的价值在其客户记录副本的帐户余额 - 更新客户的电话号码,并写入客户记录文件。5.进程B现在已经写入了其过原创 2021-08-10 20:12:51 · 278 阅读 · 1 评论 -
unix环境高级编程---信号量及其具体范例c语言
信号量定义信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号原创 2021-08-10 18:33:12 · 523 阅读 · 1 评论 -
unix环境高级编程---文件系统
文件系统系统调用和标准库函数的区别:1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器而定。fopen, fcl原创 2021-08-07 15:28:14 · 111 阅读 · 0 评论 -
unix环境高级编程--内存管理
进程映像程序是保存在磁盘上的可执行文件。运行程序时,需要将可执行文件加载到内存,形成进程。一个程序(文件)可以同时存在多个进程(内存)。进程在内存空间中的布局就是进程映像,从低地址到高地址依次为:虚拟内存虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。1. 每个进程都有各自互独立的4G字节虚拟地址空间。原创 2021-08-06 15:59:40 · 237 阅读 · 0 评论 -
unix环境高级编程---环境变量
环境变量定义:环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数比如临时文件夹位置和系统文件夹位置等。这点有点类似于DOS时期的默认路径当你运行某些程序时除了在当前文件夹中寻找外还会到设置的默认路径中去查找。简单地说这里的“Path”就是一个变量里面存储了一些常用命令所存放的目录路径。环境变量相当于给系统或用户应用程序设置的一些参数, 具体起什么作用这当然和具体的环境变量相关. 比如path, 是告诉系统, 当要求系统运行一个程序而没有告诉它程序所在的完整路径时, 系统除了在当前目录原创 2021-08-05 19:55:34 · 230 阅读 · 0 评论 -
unix环境高级编程---静态库 VS 动态库
静态库1) 直接调用#gcc main.c libmath.a2) 或通过LIBRARY_PATH环境变量指定库路径#export LIBRARY_PATH=$LIBRARY_PATH:.#gcc main.c -lmath (环境法)3) 通过gcc的-L选项指定库路径#unset LIBRARY_PATH#gcc main.c -lmath -L. (参数法)一般化的方法:gcc .c/.o -l<库名> -L<库路径>add.c#include "a原创 2021-08-04 15:10:21 · 113 阅读 · 0 评论 -
unix高级环境编程---GNU
预处理指令#include // 将指定文件的内容插至此指令处#include_next // 与#include一样,但从当前目录之后的目录查找,极少用#define // 定义宏#undef // 删除宏#if // 判定#ifdef // 判定宏是否已定义#ifndef // 判定宏是否未定义#else // 与#if、#ifdef、#ifndef结合使用#elif //原创 2021-08-04 11:59:59 · 89 阅读 · 0 评论 -
unix环境高级编程---发展历史
概述为了更好的利用计算机资源,特别是cpu,让各个应用程序公平的计算机资源,我们需要一个监控程序。而且为了更好的开发软件(应用程序),我们对硬件接口进行封装,以供应用程序调用。操作系统应运而生。Multics操作系统伟大的一步Bell(贝尔实验室), MIT(麻省理工学院人工智能实验室), GE(General Electric,通用电气)联合建立Multics操作系统Multics操作系统是一套多使用者、多任务、多层次。Multics是完成了,但是Multics 不断完善,和追求高目转载 2021-08-04 11:23:01 · 117 阅读 · 0 评论