
//【IPC与网络部分】
文章平均质量分 57
逐鹿之城
闷头做技术是学而不思则惘,整天瞎扯淡是思而不学则怠
展开
-
关于linux系统最大进程数和单进程最大线程数的测试
我的系统:RedHat企业7 64位 内存6G ulimit -a查看用于shell启动进程所占用的资源默认设置 一.最大进程数 1.使用命令ulimit -u查看软限制,我的为7807 /etc/security/limits.conf查看硬限制,内核参数kernel.pid_max也做了限制 2.系统用pid_t表示进程号,那么最大的进程数当然也不能超过pid_t的类型 查看最大原创 2017-03-02 22:08:17 · 18475 阅读 · 1 评论 -
利用共享内存,结合信号量的控制来实现服务器客户端的通信
1.server.c#include"utili.h"int main(int argc, char const* argv[]){ key_t shm_key = ftok(argv[1], 0xff); if(shm_key == -1) { perror("ftok"); exit(EXIT_FAILURE); } in原创 2017-03-11 12:45:55 · 1106 阅读 · 2 评论 -
利用消息队列实现服务器客户端的通信
1.server.c#include"utili.h"#define SND_TYPE 200#define RCV_TYPE 100typedef struct MsgType{ long msg_type; char msg_buf[MAX_MSG_LEN];}MsgType;int main(int argc, char const* argv[]){ key原创 2017-03-11 12:49:45 · 2572 阅读 · 0 评论 -
无名管道及用其实现父子进程间的通信
利用匿名管道实现剧本化的对话/*用无名管道进行通信 *采取剧本的方式 *2017-3-6 * */#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<sys/wait.h>#include<time.h>#define MAX_MSG_SIZE 256int main(){原创 2017-03-06 22:12:40 · 5398 阅读 · 0 评论 -
TCP的三路握手建立连接与四次挥手终止连接
学习网络总会遇到三路握手用来建立TCP连接,四次挥手用来终止TCP连接这个小问题。1.三路握手建立一个TCP连接时,需要经历以下三个情形 服务器必须做好接受外来的连接。这通常通过socket,bind,listen函数完成,称之为”被动打开” 客户通过调用connect发起”主动打开”。(1)上述行为就导致了,客户TCP发送SYN(同步序列号)分节,告诉服务器客户这边将在待建立的连接上发送数据原创 2017-03-28 22:01:50 · 477 阅读 · 0 评论 -
利用互斥锁+条件变量进行奇偶交替打印
线程1打印奇数,线程2打印偶数#include<stdio.h>#include<unistd.h>#include<pthread.h>#define MAX_COUNT 10pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond = PTHREAD_COND_INITIALIZER;int count原创 2017-03-30 20:24:39 · 774 阅读 · 0 评论 -
/usr/include/asm-generic/errno-base.h和errno.h对errno值的宏定义
#ifndef _ASM_GENERIC_ERRNO_H#define _ASM_GENERIC_ERRNO_H#include <asm-generic/errno-base.h>#define EDEADLK 35 /* Resource deadlock would occur */#define ENAMETOOLONG 36 /* File name too long原创 2017-03-04 08:50:36 · 976 阅读 · 0 评论 -
利用互斥锁+条件变量进行奇偶交替打印
线程1打印奇数,线程2打印偶数#include<stdio.h>#include<unistd.h>#include<pthread.h>#define MAX_COUNT 10pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond = PTHREAD_COND_INITIALIZER;int count原创 2017-03-17 11:48:04 · 467 阅读 · 0 评论 -
The Unix Signal
by https://en.wikipedia.org/wiki/Unix_signal POSIX signalsThe list below documents the signals specified in the Single Unix Specification. All signals are defined as macro constants in <signal.h> head原创 2017-04-05 11:25:26 · 485 阅读 · 0 评论 -
linux下常见信号及其捕捉
一.linux信号对应的值 #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 #define SIGILL 4 #define SIGTRAP 5 #define SIGABRT 6 #define SIGIOT 6 #define SIGBUS 7 #define SIGFP原创 2017-03-07 19:39:39 · 688 阅读 · 0 评论 -
孤儿进程与僵尸进程
转载http://www.cnblogs.com/Anker/p/3271773.html1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在u转载 2017-04-05 11:56:19 · 332 阅读 · 0 评论 -
信号量的创建/打开,访问
1.semcreate.c#include"utili.h"int main(int argc, char *argv[]){ if(argc != 2) { printf("Arguments is error!"); exit(EXIT_FAILURE); } //创建IPC键 //pathname必须存在,进程必须可以访原创 2017-03-11 12:33:06 · 1484 阅读 · 0 评论 -
有名管道+多进程最基本的并发式的通信
一.之前的有名管道实现的服务器-客户端程序只能实现你一句我一句的基本的通信。要实现最最基本的并发式通信,需要引入多个进程 真正的并发式通信不再是一个服务器针对一个客户端这种一对一的模式,而是一对多的模式。这里其实还谈不上并发。 二.代码 1.server.c/*并发式,不再是你一句我一句 * QQ聊天 * */#include"utili.h"int main(){原创 2017-03-11 12:21:55 · 1615 阅读 · 0 评论 -
Linux线程模型比较
转载自https://www.ibm.com/developerworks/cn/linux/l-threading.html 进行移植的开发人员需要了解的关键区别摘要LinuxThreads 项目最初将多线程的概念引入了 Linux®,但是 LinuxThreads 并不遵守 POSIX 线程标准。尽管更新的 Native POSIX Thread Library(NPTL)库填补了一些空白,但翻译 2017-03-03 21:39:17 · 1694 阅读 · 0 评论 -
生产者消费者——一对一
同步中有一个“生产者消费者”的经典问题,也叫它“有界缓冲区” 生产者生产数据,消费者取数据是消费(取出)数据。”数据多,空间少”才能造成生产者消费者问题 (数据)空的时候不能消费,(空间)满的时候不能生产.这一篇实现一个生产者对应一个消费者,即一对一的情况#include<stdio.h>#include<unistd.h>#include<pthread.h>#define原创 2017-03-17 15:17:23 · 521 阅读 · 0 评论 -
有名管道及其实例1
一.介绍 在前面的无名管道博文中,我们看到了创建两个管道可以实现进程间的全双工通信,那么同样也可以创建两个FIFO(有名管道)来实现不同进程间的全双工通信。 1.为什么引入有名管道? 我们通常所说的管道为无名管道或者匿名管道,管道没有名字,因此,只能在有亲缘关系的进程间(父子进程)实现通信,有名管道的出现突破了该限制,它是一个设备文件,它提供一个路径名与FIFO关联,即使进程与创建FIFO的进原创 2017-03-07 14:03:29 · 2751 阅读 · 0 评论 -
有名管道及其实例二——补充捕捉信号ctrl+c功能
一.序 在上一篇博客有名管道及其实例一的基础上,对程序进行修改,使得按下ctrl+c退出程序时,可以删除建立的两个FIFO 二.代码补充 只需要在while(1){}这个循环中加入signal(SIGINT, handler)即可 另外公共头文件加入handler()的实现void handler(int signum){ unlink(FIFO_READ); unlink原创 2017-03-07 19:58:04 · 1036 阅读 · 0 评论 -
进程的概念/标识/结构/状态
linux是一个典型的多用户多任务操作系统。多用户指多个用户可以同时使用计算机;多任务指linux可同时执行几个任务,可以在还未执行完一个任务时又执行另一个任务。进程即运行中的程序,linux可以同时启动多个进程。一.进程概念 1.根据操作系统对进程的定义 进程就是操作系统资源管理的最小单位。 2.理解 进程是程序的一次执行过程,它是动态的实体。需要将它和程序/线程对比着更好理解 (1原创 2017-03-05 22:26:03 · 5373 阅读 · 0 评论 -
linux中ps命令所得内容的解释
linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 5. 停止(进程收到SIGSTOP, SIGSTP, SI原创 2017-03-05 22:49:48 · 2030 阅读 · 0 评论 -
进程控制概述
fork/vfork:创建一个新进程 exit:终止进程 exec…(exec家族):执行一个(新的)应用程序 wait:将父进程挂起,等待子进程终止 getpid:获取当前进程的ID nice:改变进程的优先级 类似的一些系统调可以用来完成创建进程,执行新程序,退出进程,改变进程优先级等。后序通过示例讲解原创 2017-03-05 23:06:48 · 331 阅读 · 1 评论 -
进程的内存映射
1.linux下程序转化成进程 linux下C程序的生成分成:预编译–>编译–>汇编–>链接。gcc编译器通过前三步将源文件转换成目标文件。若程序有多个目标文件或者程序中使用了库函数,编译器还需要将所有目标文件或者所需要的库链接起来,最后生成可执行程序。当程序执行时,操作系统将可执行程序复制到内存中。程序转化成进程需要3步: (1)内核将程序读入内存,为程序分配内存空间 (2)内存为该程原创 2017-03-05 23:40:54 · 1515 阅读 · 0 评论 -
POSIX和System V的比较/IPC函数汇总
当我们在linux系统中进行进程间通信时,会发现例如共享内存,信号量,消息队列等方式时,会发现有System v以及POXIS两种类型。因此,我们探究一下System v和POXIS到底代表着什么意义。 POSIX POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准原创 2017-03-09 12:56:10 · 10766 阅读 · 0 评论 -
利用sockets实现服务器客户端简单通信
这一篇通篇代码实现的是一对一的你一句我一句的通信,客户端和服务器可以是两台不同的主机。//utili.h//头文件中可以更改端口号,主机名#include<stdio.h>#include<unistd.h>#include<sys/socket.h>#include<netinet/in.h>#include<string.h>#include<stdlib.h>#include<原创 2017-03-27 20:38:27 · 582 阅读 · 0 评论 -
关于并发与并行
转载http://ifeve.com/parallel_and_con/1.做并发编程之前,必须首先理解什么是并发,什么是并行,什么是并发编程,什么是并行编程。并发(concurrency)和并行(parallellism)是:解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。解释三:在转载 2017-03-11 12:10:19 · 564 阅读 · 0 评论 -
SIGHUP
SIGHUP是unix中进程组织结构为 session 包含一个前台进程组及一个或多个后台进程组,一个进程组包含多个进程。一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。 一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。 这儿是可能会有,在一定情况之下是没有的。 与终端交互的进程是前台进程,否则便是后台进程转载 2017-05-19 17:26:50 · 1502 阅读 · 0 评论