随笔分类 - Linux环境编程
摘要:tcpip协议使用"流式"(套接字)进行数据的传输,就是说它保证数据的可达以及数据抵达的顺序,但并不保证数据是否在你接收的时候就到达,特别是为了提高效率,充分利用带宽,底层会使用缓存技术,具体的说就是使用Nagle算法将小的数据包放到一起发送,但是这样也带来一个使用上的问题——黏包,黏包就是说一次将
阅读全文
摘要:当我们用socket进行编程的时候,细节上都是选择一个 ,`AF_INET`再根据相应的类型填充地址,其实根据通信需求,有几种简单的服务模型可供选用,掌握了这些框架再结合socket高度的抽象,可以为我们编写简单的服务器程序提供指导 循环服务 用户请求服务需要排队,服务器一次只能服务一个客户,服务完
阅读全文
摘要:UNIX域套接字本地通信即在socket第一个参数中选择 ,socket是BSD提出的一种适用于所有的情况的进程间通信的方式,虽然现在多用于网络通信,但是本机内的进程间通信也是没有问题的,使用socket机制的UNIX域常用在前台进程和后台进程的通信。VS tcp/ip和udp/ip的socket在
阅读全文
摘要:getsockopt()/setsockopt() level :选项级别 SOL_SOCKET :指定设置属性在socket API层次,即通用socket选项 IPPROTO_IP :IP选项。 IPPROTO_TCP :TIP选项。 optname :选项名 SO_BROADCAST :广播
阅读全文
摘要:Linux中一切皆文件,不论是我们存储在磁盘上的字符文件,可执行文件还是我们的接入电脑的 I/O设备 等都被VFS抽象成了文件,比如标准输入设备默认是键盘,我们在操作标准输入设备的时候,其实操作的是默认打开的一个文件描述符是0的文件,而一切软件操作硬件都需要通过OS,而OS操作一切硬件都需要相应的驱
阅读全文
摘要:模型 创建孤儿进程 fork() 创建新的会话 setid() 改变当前目录为根目录chdir() 重设文件权限掩码umask() 关闭文件描述符close() 创建孤儿进程 创建孤儿进程只需要将父进程关闭保留子进程 pid_t pid_child=fork(); if(0
阅读全文
摘要:Reentrant和Thread safe 在单线程程序中,整个程序都是顺序执行的,一个函数在同一时刻只能被一个函数调用,但在多线程中,由于并发性,一个函数可能同时被多个函数调用,此时这个函数就成了临界资源,很容易造成调用函数处理结果的相互影响,如果一个函数在多线程并发的环境中每次被调用产生的结果是
阅读全文
摘要:条件变量是线程同步的另一种方式,实际上,条件变量是信号量的底层实现,这也就意味着,使用条件变量可以拥有更大的自由度,同时也就需要更加小心的进行同步操作。条件变量使用的条件本身是需要使用互斥量进行保护的, 线程在改变条件状态之前必须首先锁住互斥量 ,其他线程在获得互斥量之前不会察觉到这种改变,因为互斥
阅读全文
摘要:PV原子操作 P操作: 如果有可用的资源(信号量值 0),则此操作所在的进程占用一个资源(此时信号量值减1,进入临界区代码); 如果没有可用的资源(信号量值=0),则此操作所在的进程被阻塞直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)。 V操作: 如果在该信号量的等待队列中有进程
阅读全文
摘要:同步 同一个进程中的多个线程共享所在进程的内存资源,当多个线程在同一时刻同时访问同一种共享资源时,需要相互协调,以避免出现数据的不一致和覆盖等问题,线程之间的协调和通信的就叫做线程的同步问题, 线程同步的思路: 让多个线程依次访问共享资源,而不是并行 互斥VS同步 互斥:是指某一资源同时只允许一个访
阅读全文
摘要:概念 原来指向main()的线程叫做主线程(main thread) 使用pthread_create()创建出来的线程,叫做子线程(child thread) 主/子线程只有在创建时才有区别, 创建完了就一视同仁, 都是一样的独立个体, 可以有交流、共享和私有, 但没有上下级, 这一点和多进程一样
阅读全文
摘要:模型 socket() domain :协议族(protocol family)(网络通讯(IP)还是本地通讯(xxx.socket)) AF_INET 用于实现给予ipv4网络协议的网络协议 type :协议(TCP还是UDP) SOCK_DGRAM //数据报套接字, 实现包括但不限于UDP协议
阅读全文
摘要:模型 socket() domain :协议族(protocol family)(网络通讯(IP)还是本地通讯(xxx.socket)) AF_INET 用于实现给予ipv4网络协议的网络协议 type :协议(TCP还是UDP) SOCK_STREAM //流式套接字, 实现包括但不限于TCP协议
阅读全文
摘要:头文件 socket() domain :协议族(protocol family)(网络通讯(IP)还是本地通讯(xxx.socket)) AF_LOCAL 本地通讯/AF_UNIX/ AF_INET 用于实现给予ipv4网络协议的网络协议 AF_INET6 用于实现给予ipv6网络协议的网络协议
阅读全文
摘要:模型 sem_open() oflag O_CREAT 如果信号量不存在就创建信号量,信号量的UID被设为调用进程的effective UID,GID被设为调用程序的GID,可以在mode指定权限 O_EXCL 和O_CREAT连用,确保可以创建新的信号量,如果已存在就报错 value :配合O_C
阅读全文
摘要:模型: POSIX mq VS Sys V mq的优势 更简单的基于文件的应用接口 完全支持消息优先级(优先级最终决动队列中消息的位置) 完全支持消息到达的异步通知,这通过信号或是线程创建实现 用于阻塞发送与接收操作的超时机制 消息队列名 由 知:消息队列由一个形如'/somename'的名字唯一标
阅读全文
摘要:模型 shm_open oflag Access Mode: O_RDONLY 以只读的方式打开共享内存对象 O_RDWR 以读写的方式打开共享内存对象 Opening time flags(Bitwise Or): O_CREAT 表示创建共享内存对象,刚被创建的对象会被初始化为0byte可以使用
阅读全文
摘要:模型 ftok() pathname :文件名 proj_id : 1~255的一个数,表示project_id semget(): nsems : 信号量集的大小/信号量的个数,0表示获取已经存在的信号量集 semflg IPC_CREAT :若不存在则创建, 需要在msgflg中"|权限信息";
阅读全文
摘要:模型 ftok() pathname :文件名 proj_id : 1~255的一个数,表示project_id msgget() msgflg :具体的操作标志 IPC_CREAT 若不存在则创建, 需要在msgflg中"|权限信息"; 若存在则打开 IPC_EXCL 若存在则创建失败 0 获取已
阅读全文
摘要:模型 ftok() pathname :文件名 proj_id : 1~255的一个数,表示project_id shmget() key :ftok()的返回值 size :共享内存的大小,实际会按照页的大小(PAGE_SIZE)来分配。0表示获取已经分配好的共享内存 shmflg :具体的操作标
阅读全文