
Unix C
文章平均质量分 82
Paul_0920
这个作者很懒,什么都没留下…
展开
-
accept和select的区别
参考:https://blog.youkuaiyun.com/lsgqjh/article/details/65629609select:查看指定fd_set中socket状态,如果fd_set中有套接字准备就绪(触发(读、写或执行)),则会返回,返回值为触发的套接字个数accept:经过创建套接字socket()绑定bind()以及listen()之后,将监听socket和客户端socket建立一个全新连接,并返回client的socket信息;判断是否有客户端发起链接请求, 一般用select(),.转载 2020-06-07 22:28:06 · 2654 阅读 · 0 评论 -
面試1:Linux网络编程——select、poll和epoll(重點select和epoll对比)
https://blog.youkuaiyun.com/lianghe_work/article/details/46534029小哥整理的不错,对一些基础的东西总结的比较全面。一、回顾前面的selectselect优点:目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点select缺点:1.每次调用 select(),都需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd...转载 2020-03-23 09:09:15 · 362 阅读 · 0 评论 -
linux高级IO-----readv、writev 以及 struct iovec
readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数称为散布读(scatter read)和聚集写(gather write)。#include<sys/uio.h>struct iovec { /* Starting address (内存起始地址)*/ void *iov_base; ...原创 2019-04-22 16:01:27 · 1485 阅读 · 0 评论 -
linux网络编程的总结(包含网络七层模型)
一、网络七层模型1、OSI的来源 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。 ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。 2、...转载 2019-04-17 11:40:46 · 1067 阅读 · 0 评论 -
内存分配 后续整理
https://kb.cnblogs.com/page/66608/转载 2018-12-16 20:58:44 · 140 阅读 · 0 评论 -
Linux网络编程——Unix本地套接字
https://blog.youkuaiyun.com/lu_embedded/article/details/78352230转载 2018-11-08 15:54:37 · 219 阅读 · 0 评论 -
Linux操作系统下的多线程编程详细解析----条件变量pthread_cond_t
在多线程编程下,常常出现A线程要等待B线程条件完成后再继续进行,这里等待方式有两种:1.使用锁+轮询 使用这种方法可以很简单的实现,但是会有一定的性能消耗,其还有一个点要好好把握,就是一次轮询没有结果后相隔多久进行下一次的轮询,间隔时间太短,消耗的CPU资源较多,间隔时间太长,不能很及时的响应请求。所以这种方法不是推荐。2.使用条件变量的线程同步(推荐)采用阻塞和消...转载 2018-09-26 16:41:43 · 793 阅读 · 0 评论 -
linux-i386(ubuntu)下编译安装gsoap_2.8.17过程记录
过程记录 : 1.下载gsoap_2.8.17.zip 并 解压 : $unzip gsoap_2.8.17.zip 2.进入解压后的目录gsoap-2.8 3.自动配置编译环境: $./configure –prefix=$(pwd)/_install 配置失败原因:error: C++ compile转载 2017-12-06 17:44:07 · 521 阅读 · 0 评论 -
IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议、网络音频/视频广播、AOD/VOD、股市行情发布、多媒体远程教育、CSCW协同计算、远程会诊。这就带来了带宽的急剧消耗和网络拥挤问 题。为了缓解网络瓶颈,人们提出各种方案,归纳起来,主要包括以下四种: ●增加互连带宽; ●服务器的分散与集转载 2017-12-05 15:33:23 · 5082 阅读 · 0 评论 -
pthread_cleanup_push与pthread_cleanup_pop的目的 作用
首先你必须知道pthread_cleanup_push与pthread_cleanup_pop的目的(作用)是什么。比如thread1:执行pthread_mutex_lock(&mutex);//一些会阻塞程序运行的调用,比如套接字的accept,等待客户连接sock = accept(......); //这里是随便找的一个可以阻塞的接口转载 2017-12-05 10:40:27 · 246 阅读 · 0 评论 -
嵌入式 Linux线程锁详解pthread_mutexattr_t【转】
在Posix Thread中定义有一套专门用于线程同步的mutex函数。 1. 创建和销毁 有两种方法创建互斥锁,静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁,方法如下: pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中,pthread_mut转载 2017-11-23 14:43:40 · 643 阅读 · 0 评论 -
Linux进程间通信——使用共享内存
下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc转载 2017-10-13 10:04:47 · 145 阅读 · 0 评论 -
linux 系统函数之 localtime, localtime_r, strftime
1. localtime头文件: #include 函数定义: struct tm *localtime(const time_t *timep);功能: 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtimes函数转换后的时间没有经过时区变换,是转载 2017-09-12 11:37:28 · 8598 阅读 · 0 评论 -
UNIX高级编程总结-----标准I/O库 (三)
九、实现细节原创 2019-04-27 16:40:52 · 162 阅读 · 0 评论 -
UNIX高级编程总结-----文件I/O (二)
上一篇九、文件共享 内核使用了3种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。以下是书中总结的三个部分: 如果说,两个单独的进程各自打开了同一个文件,其关系如下图: 由图3-8可以看出,两个进程打开同一个文件,他们各自有自己的文件表项,但是其v节点指向的是同一个v节点表项。之所以...原创 2019-05-04 17:22:40 · 191 阅读 · 0 评论 -
UNIX高级编程总结-----文件I/O (一)
一、文件描述符 1、对于内核而言,所有打开的文件都通过文件描述符来表示。文件描述符是一个非负整数,当打开或者创建一个文件时,内核会向进程返回一个文件描述符。当对文件进行操作时,会使用到文件描述符。UNIX系统shell把0与标准输入,1与标准输出,2与标准错误相关联。所以在unix中文件描述符0,1,2被标准化,为提高可读性,定义了三个宏STDIN_FILENO、STDOUT_F...原创 2019-05-03 16:10:22 · 306 阅读 · 0 评论 -
linux网络编程:多播(组播)编程
什么是多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。 多播,也称为“组播”,将局域网中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数...转载 2019-05-13 13:53:30 · 461 阅读 · 0 评论 -
UNIX高级编程总结-----进程间通信(FIFO---有名管道)
1、简介 对于普通的未命名pipe,两个不相关的进程是无法通信的。但是对于命名通道FIFO而言,即便是两个不相关的进程也可以实现进程间通信。2、操作 FIFO FIFO在文件系统中表现为一个文件,大部分的系统文件调用都可以用在FIFO上面,比如:read,open,write,close,unlink,stat等函数。但是seek等函数不能对FIFO...原创 2019-05-20 17:14:13 · 326 阅读 · 0 评论 -
UNIX高级编程总结-----进程间通信(管道)
管道是UNIX 系统中比较古老的一种,他有两个比较大的局限性(缺点)。 (1)历史上的通道都是半双工的(即数据只能往一个方向流)。某些系统是全双工的,但是由于大多数系统都是半双工的,为了提高可移植性,应该将通道视作半双工去使用。 (2)管道的只能使用在有公共祖先的进程之间。一般情况下,一个进程由进程创建,在调用fork之后,这个管道就能在父子进程...原创 2019-05-16 15:20:16 · 323 阅读 · 0 评论 -
UNIX高级编程总结-----进程环境
1、进程的终止方式 通常情况下,进程有八种终止方式(5种正常终止 + 3种异常终止) 正常终止: (1)main 的 正常 return (2)调用 exit 退出 (3)调用 _exit 和 _Exit (4)最后一个线程从启动历程返回 (5)最后一个线程调用pthread_exit退出...原创 2019-05-24 21:29:27 · 199 阅读 · 0 评论 -
在Linux中设置umask值以及umask函数
一、umask命令 umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。 对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行umask命令可以查看当前用户的umask值。[root@localhost ~]#umask0...转载 2019-05-24 13:24:03 · 3183 阅读 · 0 评论 -
UNIX高级编程总结-----进程间通信(XSI IPC 总述)
在 XSI IPC 中,有三种IPC:消息队列、信号量 以及 共享内存,他们之间有许多相似之处。 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。1、标识符 和 ...原创 2019-05-20 17:16:27 · 390 阅读 · 0 评论 -
linux下进程的实际用户ID(有效组)和有效用户ID(有效组ID)
实际用户ID(实际组ID):标识当前用户(所属组)是谁,当用户登陆时取自口令文件。 有效用户ID(有效组ID):用来决定我们(当前进程)对文件的访问权(即实际该进程的是以那个用户运行的)。 一般情况下,进程的有效用户ID等于进程的实际用户ID,进程的有效用户组ID等于进程的实际用户组ID。 但是当可执行程序文件的文件模式(st_mode)中设置了“设置-用户-ID(set_use...转载 2019-05-07 17:20:01 · 2216 阅读 · 0 评论 -
UNIX高级编程总结-----标准I/O库 (二 行IO、二进制IO、格式化IO、定位流、内存流)
上一篇五、每次一行的IO 上一篇总结到了标准IO库中,单个字符的IO操作。紧接上篇,Unix中提供了两个 以行为单位操作的IO:#include<stdio.h>char *fgets(char *restrict buf, int n,FILE* restrict fp);char *gets(char *buf); ...原创 2019-05-24 19:33:31 · 286 阅读 · 0 评论 -
UNIX高级编程总结-----标准I/O库 (一 流、缓冲、打开流、读写流)
一、流 和 FILE对象 之前在文件I/O中提到的函数,都是围绕文件描述符的,当打开一个文件时,返回的是一个文件描述符,然后对该文件描述符进行后续的I/O操作。而对于标准I/O库,他们的操作是围绕着 流进行的。当用标准I/O库打开或创建一个文件时,我们就使一个流与一个文件相关联。 在标准IO流中预定义了3个文件指针,stdin(标准输入)、stdout(标准输...原创 2019-04-25 11:13:20 · 333 阅读 · 0 评论 -
UNIX高级编程总结-----文件I/O (练习题)
内核中几乎所有的IO都会经过内核的块缓冲区。所以,所谓的“不带缓冲的IO”,是指在用户层的进程对读写不进行自动的缓冲。 fd1、fd2 和 fd3 指向的是同一个v节点表,fd1 和 fd2 指向的同一个文件表项。F_SETFL影响的是fd1指向的文件表项中的文件状态标志。F_SETFD 作用于fd1 只对fd1 文件描述符状态。 ...原创 2019-05-04 17:22:30 · 330 阅读 · 0 评论 -
LinuxC多线程详解
线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 使用多线程的理由之转载 2017-09-08 11:40:57 · 1405 阅读 · 0 评论 -
总结之linux下网络编程
1.有一篇好的文章,对Linux下socket编程的原理和要点说的很清楚:http://blog.youkuaiyun.com/chencheng126/article/details/442607992.一些windows网络编程的要点吧。包括大头序,小头序,网络字节序。一些常用的函数等。。http://blog.youkuaiyun.com/chencheng126/artic转载 2017-09-08 16:15:07 · 199 阅读 · 0 评论 -
13.进程间通信---网络通信(TCP协议和UDP协议的比较)
TCP协议和UDP协议的比较1 TCP协议tcp协议的概念和特性 tcp - 传输控制协议,是一种面向连接的协议,类似打电话 - 建立连接 => 进行通信 => 断开连接 - 在通信的整个过程中全程保持连接 - 该协议保证了数据传递的可靠性和有序性 - 实现了流量的控制,避免数据发送方发送过多数据导致 数原创 2016-05-20 16:40:42 · 536 阅读 · 0 评论 -
11.进程间通信---网络通信(基于socket的一对一通信模型)
1 基本概念 socket 插座 通信载体 作为进程间通信的通信点2 通信的模型服务器: (1)创建socket,使用socket函数 (2)准备通信地址,使用结构体类型 (3)绑定socket和通信地址,使用bind函数 (4)进行通信,使用read/write函数 (5)关闭socket,使用close函数客户端: (1原创 2016-05-20 10:36:33 · 676 阅读 · 0 评论 -
进程间通信方式及比较
1.管道:管道仅仅作为进程间通信的媒介,管道文件本身不会存放任何数据(管道好像一个吸管,一个短到不能存放东西的吸管) 有名管道---实现任意进程间通信 无名管道---实现父子进程间通信2、信号(signal): 信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上转载 2016-05-19 11:57:42 · 351 阅读 · 0 评论 -
7.进程间通信---共享内存
共享内存:本质就是由操作系统内核维护的一块内存区域,其中一个进程负责写入数据到共享内存中,另外一个进程负责读取共享内存区域的数据从而实现进程间通信步骤: (1)获取key值,使用ftok函数 ftok函数 #include #include key_t ftok(const char *pathname原创 2016-05-18 14:17:28 · 361 阅读 · 0 评论 -
5.文件管理
1 文件的基本概念 在Unix/linux系统中,几乎所有的一切都可以看作文件,因此,对于文件的操作适用于各种输入输出设备等等,当然目录也可以看作文件如: /dev/null => 空设备 echo hello > /dev/null => 表示丢弃处理的结果 cat /dev/null > a.txt => 表示清空文件a.txt2 文件原创 2016-05-07 12:02:30 · 537 阅读 · 0 评论 -
4.内存管理
1.内存管理1.1 程序和进程的概念 程序 - 硬盘上的可执行文件 进程 - 在内存中运行的程序 同一个程序可以同时对应多个进程,也就是同一个程序可以执行很多次原创 2016-05-05 15:54:31 · 393 阅读 · 0 评论 -
3.环境表
1.环境表的概念和使用1.1 基本概念 环境表主要是指环境变量的集合,每个进程中都有一个环境表,用于记录与当前进程相关的环境变量信息 环境表采用字符指针数组的形式进行存储,然后使用全局变量char** envrion来记录环境表的首地址,使用NULL表示环境表的末尾1.2 相关函数(1)getenv函数 #include char *ge原创 2016-05-05 09:42:20 · 364 阅读 · 0 评论 -
2.常用的预处理指令、环境变量以及库文件的使用
1 复习C语言中的指令,以‘#’开头,在预处理阶段中执行的指令 #include ... #define ... #undef 取消宏定义 #if #ifdef #ifndef #elif #else #endif2 学习新的预处理指令 #line 整数n--原创 2016-05-03 11:05:19 · 646 阅读 · 0 评论 -
1.gcc的基本使用
1 基本概念 原名叫做 GNU C Compiler(GNU C语言编译器),只是用于编译C语言,后来做了一些扩展,支持C++、OC等语言的编译,因此改名为:GNU Compiler Collection(GNU 编译器套间/集合)1.2 基本功能目前主流的编程都采取高级语言进行编写,如:C语言,但是高级语言编写的源代码文件是无法被计算机执行的,需要通过编译链接生成最终的可原创 2016-04-29 15:28:48 · 735 阅读 · 0 评论 -
Linux系统中头文件的使用
文件add.h#ifndef ADD_H_#define ADD_H_int add(int,int);double add2(double,double);#endif文件add.cint add(int a,int b){ return a+b;}double add2(double a,double b){ return a+b原创 2016-04-07 21:12:58 · 408 阅读 · 0 评论 -
12.进程间通信---网络通信(TCP协议,一对多)
基于TCP协议的编程模型1 编程模型(重点掌握)服务器: (1)创建socket,使用socket函数 (2)准备通信地址,使用结构体类型 (3)绑定socket和通信地址,使用bind函数 (4)监听,使用listen函数 listen函数 #include #include int listen(int sockfd原创 2016-05-20 16:38:45 · 530 阅读 · 0 评论 -
linux C中的select的使用
一.Select 函数详细介绍 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。转载 2017-08-29 09:55:27 · 1186 阅读 · 0 评论