linux
文章平均质量分 77
专注于linux的学习
小贾-同志
每一个不曾起舞的日子都是对生命的辜负
展开
-
这样回答【什么是线程安全】
文章目录【1】不是线程的安全【2】私有的东西就不该让别人知道【3】大家不要抢,人人有份【4】只能看,不能摸【5】没有规则,那就先入为主【6】互斥锁(悲观)【7】CAS(乐观)【1】不是线程的安全面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。切记望文生义。同理,“线程安全”也不...原创 2019-12-03 10:12:51 · 586 阅读 · 1 评论 -
【关于网络编程高并发问题的解决方案】
文章目录思路一:每个进程/线程处理一个连接(多进程/多线程思路二:每个进程/线程同时处理多个连接(IO多路复用)实现方式1:循环处理实现方式2:select实现方式3:poll实现方式4:epoll实现方式5:封装成库要解决这一问题,从纯网络编程技术角度看,主要思路有两个:【1】 一个是对于每个连接处理分配一个独立的进程/线程(即多进程和多线程);【2】 另一个思路是用同一进程/线程来同时...原创 2019-11-22 15:42:18 · 576 阅读 · 0 评论 -
【多进程多线程原理】
Linux的线程实现是在核外进行的,核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用_clone()和fork(),最终都用不同的参数调用do_fork()核内API。 do_fork() 提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLO...原创 2019-11-22 11:15:32 · 483 阅读 · 0 评论 -
【Linux】使用信号量semaphore控制多个线程按序交替打印
文章目录【1】题目描述【2】问题分析【3】示例代码【4】运行结果【1】题目描述【2】问题分析我们可以使用信号量进行同步三个线程固定打印顺序如图所示:【3】示例代码#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#include<...原创 2019-08-05 16:41:32 · 2360 阅读 · 0 评论 -
【Linux】实现一个简单的shell命令解释器
文章目录【1】实现的功能【2】代码【3】运行结果【1】实现的功能我们所做的这个简单的shell命令解释器可以实现简单的常用的基本命令,如ls、pwd、cd、cd - 、cd ~ 等根据简单命令的定义,它的第一个参数是要执行的命令,后面的参数作为该命令的参数。要执行的命令有两种情况:一种是外部命令: 也就是对应着磁盘上的某个程序,例如 pwd、ls等等。对于这种外部命令,我们首先要到指定的...原创 2019-08-01 10:42:12 · 7022 阅读 · 33 评论 -
深入理解阻塞/非阻塞IO、同步/异步IO的区别
文章目录【1】同步、异步、阻塞和非阻塞的概念【2】阻塞IO模型【3】非阻塞IO模型【4】IO复用模型【5】信号驱动IO【6】异步IO模型【7】各种IO模型的比较【1】同步、异步、阻塞和非阻塞的概念同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。例如:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。异步:异步的概念和同步相...原创 2019-07-30 12:29:07 · 4146 阅读 · 2 评论 -
【网络编程】|| 基于TCP实现的简单HTTP服务器
文章目录原创 2019-07-26 12:31:27 · 2224 阅读 · 0 评论 -
【I/O多路复用】select、poll、epoll的区别
文章目录原创 2019-07-22 13:46:31 · 1372 阅读 · 0 评论 -
【I/O多路复用】epoll系统调用的ET(Edge Trigger)模式
文章目录什么是LT和ET模式什么是LT和ET模式epoll对文件描述符的操作有两种模式 LT(LevelTigger)电平触发模式和ET (EdgeTrigger, 边沿触发)模式。LT模式是默认的工作模式,这种模式下cpoll相当于一 个效率较高的poll.当往epoll内核事件表中注册一个文件描述符上的EPOLET事件时,epoll将以ET模式来操作该文件描述符。ET模式是epoll的高...原创 2019-07-20 22:40:23 · 1597 阅读 · 0 评论 -
基于UDP实现的socket通信
文章目录【1】TCP和UDP的区别【2】TCP和UDP的编程流程【3】函数sendto()和recvfrom()【4】代码示例【1】TCP和UDP的区别Tcp 是 面向连接的 可靠的 流式服务所以Tcp 需要进行三次握手建立连接后,才可以传输用户数据,可靠性是通过应答确认、超时重传机制等保证,还有滑动窗口来进行流量控制。Udp 是 无连接 不可靠 数据报服务所以UDP不需要进行三次握手来...原创 2019-07-20 08:48:07 · 13118 阅读 · 4 评论 -
【I/O多路复用】epoll系统调用(默认LT模式)
文章目录【1】epoll相关的系统调用epoll_create()epoll_ctl()epoll_wait()代码示例【1】epoll相关的系统调用epoll是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大差异。首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll 把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无须像sel...原创 2019-07-20 22:36:14 · 2150 阅读 · 0 评论 -
【I/O多路复用】poll系统调用
文章目录程序示例【poll的优缺点】程序示例下面是一个基于TCP的客户端服务器交互的程序,建立三次连接后若client客户端不发送数据,则服务器端会一直轮询fdset集合等待client客户端发送数据,直到client发送数据,select会检测到有事件就绪,再进行处理,timeout设置为5秒,若5秒内没有数据发送到服务器则会打印出"time out"。server.c#include&...原创 2019-07-20 08:56:17 · 1469 阅读 · 0 评论 -
【I/O多路复用】select系统调用
文章目录使用select函数的过程一般是:先调用宏FD_ZERO将指定的fd_set清零,然后调用宏FD_SET将需要测试的fd加入fd_set,接着调用函数select测试fd_set中的所有fd,最后用宏FD_ISSET检查某个fd在函数select调用后,相应位是否仍然为1。...原创 2019-07-20 08:54:23 · 1412 阅读 · 0 评论 -
Linux网络编程基础API【socket】
文章目录创建socket命名socket监听socket接受连接发起连接关闭连接代码示例创建socketlinux的思想是一切东西皆为文件,socket也不例外,他就是个可读可写可控制可关闭的文件描述符。接下来我们看看如何创建一个socket。#include<sys/types.h>#include<sys/socket.h>int sockfd=socket...原创 2019-05-26 19:17:57 · 1428 阅读 · 0 评论 -
深入理解IO复用技术 | select、poll、epoll
文章目录前言select()和poll() IO多路复用模型select的缺点poll的问题epoll IO多路复用模型实现机制epoll编程实例前言在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。...转载 2019-05-24 01:09:42 · 1503 阅读 · 0 评论 -
POSIX线程 | 信号量、互斥锁、条件变量
文章目录什么是线程线程的优缺点线程函数pthread_create()pthread_exit()pthread_join()代码示例信号量互斥锁条件变量线程安全的字符串分割函数什么是线程线程其实就是进程内部的一条执行路径或控制序列。一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各自独立的任务。线程的优缺点优点...原创 2019-05-15 01:31:41 · 2178 阅读 · 0 评论 -
IPC(进程间通信) | 消息队列
文章目录消息队列的基本概念Linux的消息队列机制msgget函数msgctl函数msgsnd函数消息队列的基本概念消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法。与有名管道比较起来,消息队列的优点在独立于发送与接收进程,这减少了在打开与关闭有名管道之间同步的困难。消息队列提供了一种由一个进程向另一个进程发送块数据的方法。另外,每一个数据块被看作有一个类型,而接收进程可以独...原创 2019-05-13 23:51:56 · 1453 阅读 · 0 评论 -
IPC(进程间通信) | 共享内存
共享内存是最高效的IPC机制,因为他不涉及进程之间的任何数据传输。这种高效率带来的问题是,我们必须用其他辅助手段来同步进程对共享内存的访问,否则会产生竞态条件。因此,共享内存通常和其他进程通信方式一起使用。Linux共享内存的API都定义在sys/shm.h头文件中,包括四个系统调用:shmget, shmat, shmdt, shmctl.1.shmget系统调用shmget系统调用创建一...原创 2019-05-12 20:54:02 · 1549 阅读 · 0 评论 -
fork()与输出缓冲区的一个坑
文章目录题目:请问下面的程序一共输出多少个“A”? #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; for...原创 2019-05-11 16:25:55 · 1666 阅读 · 1 评论 -
Shell脚本编程基础
文章目录【1】什么是Shell?【2】什么是脚本?【3】第一个shell脚本【4】运行脚本的两种方式1.作为可执行程序2.作为命令解释器【5】shell变量【6】Shell 传递参数示例【7】环境变量【8】条件语句 if else示例1示例2【9】循环语句 while示例1示例2【10】算术运算符示例【1】什么是Shell?shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令...原创 2019-04-29 15:18:18 · 1639 阅读 · 0 评论 -
IPC(进程间通信) | 信号量机制
进程间的通信进程间的通信有以下几种方式:1. 管道:管道分为有名管道和无名管道2. 信号量:通过控制多个进程对临界资源的访问,使得同一时刻只允许一个进程对临界资源进行访问3. 共享内存:把一块内存空间映射到两个进程的地址空间中,使得他们能够访问同一块内存空间,达到数据的共享。4. 消息队列:向消息队列中添加数据,从消息队列中读取数据本文主要讲通过信号量机制进行进程同步什么是信号量?信...原创 2019-04-19 19:39:02 · 2311 阅读 · 2 评论 -
linux中makefile的简单使用
linux中makefile的基础简单使用首先:makefile是为了一次性编译链接处理程序所使用的一个类似于脚本的东西;我们先来看看它的内容其中“:”的含义就是每一行的程序文件的来源例如main.o:main.c意思就是main.o程序是由main.c程序得到的;那么是怎么得到的呢?我们就在下一行给出了来源。注意,千万注意: 第二行前边空格是Tab键打出来的;不是用空格键敲出来的;...原创 2018-12-23 14:57:49 · 1494 阅读 · 0 评论 -
Linux下gcc的使用
linux系统下gcc的使用(c语言程序)gcc的使用可以分步进行,也可以一步进行1.分步进行1.预编译gcc -E main.c -o main.i ( 其中main.c为源程序,预编译成为.i文件)2.汇编gcc -S main.i -o main.s (其中main.s形成汇编代码)3.编译gcc -c main.s -o main.o ( 其中main.o为目标文件...原创 2018-12-22 19:23:32 · 4695 阅读 · 2 评论 -
【转】|【Linux】线程同步-----条件变量
复习时看到这篇写的不错博客解决了自己的疑惑!!!----->>>linux 线程学习之条件变量原创 2019-09-15 19:24:37 · 191 阅读 · 0 评论 -
【转】|【Linux】软链接和硬链接的区别和作用
原文地址:软连接和硬链接到底有啥作用和区别很通俗易懂的一篇博文原创 2019-09-29 13:13:21 · 276 阅读 · 0 评论