之前发的在公众号上代码阅读体验不佳,所以排版后重新发布。 1. 网络编程基本概念 1.1 什么是套接字 套接字,也叫socket,是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户。...; 1.3 ip地址的表示 通常我们在表达IP地址时习惯使用点分十进制表示的数值(或者是为冒号分开的十六进制Ipv6地址),而在socket编程中使用的则是二进制值,这就需要对这两个数值进行转换。...内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式; 内存的高地址存储数据的低字节,低地址存储数据高字节的方式称为大端模式; eg,对于内存中存放的数0x12345678来说: 如果是采用大端模式存放的...Ipv6地址),而在socket编程中使用的则是32位的网络字节序的二进制值,这就需要对这两个数值进行转换。...在linux中,最常用的是gethostbyname()和gethostbyaddr(),它们都可以实现IPv4/IPv6的地址和主机名之间的转化。
linux系列之shell编程(一) shell概述 shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。 shell解释器 Linux提供的解释器有 [shaofei@upuptop-pc ~]$ cat /etc/shells /bin/sh /bin/bash /usr/bin/sh...:在找到匹配内容时所执行的一系列命令 选项参数说明 选项参数 功能 -F 指定输入文件折分隔符 -v 赋值一个用户定义变量 案例实操 数据准备 [shaofei@upuptop-pc sh]$ sudo...[shaofei@upuptop-pc sh]$ awk '/^$/{print NR}' sed.txt 5 sort sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出...: 张三 40 李四 50 王五 60 使用Linux命令计算第二列的和并输出 [shaofei@upuptop-pc sh]$ cat chengji.txt | awk -F " " '{sum+
网络编程中的四种IO模型 阻塞IO模型,默认socket都是阻塞的,就是IO操作都要等待操作完成以后才能返回; 非阻塞IO模型,就是IO操作时不等待,立即返回,但需要不断的去询问内核,数据是否准备好了,...2.1.3 水平模式和边沿模式的选择 ET比LT对应用程序的要求更多,需要程序员设计的部分也更多,看上去LT好像要简单很多,但是当我们要求对fd有超时控制时,LT也同样需要对fds进行遍历,此时不如使用本来就要遍历的...而且由于epollwait每次返回的fds数量是有限的,在大并发的模式下,LT将非常的繁忙,所有的fds都要在它的队列中产生状态信息,而每次只有一部分fds能返回给应用程序。...功能说明:等侍注册在epfd(epoll生成的文件描述符)上的socket fd的事件的发生,如果发生则将发生的sokct fd和事件类型放入到events数组中。...更多c++及python系列文章,请关注我的公众号:晟夏的叶。
网络编程中的四种IO模型 阻塞IO模型,默认socket都是阻塞的,就是IO操作都要等待操作完成以后才能返回; 非阻塞IO模型,就是IO操作时不等待,立即返回,但需要不断的去询问内核,数据是否准备好了,...2.1.3 水平模式和边沿模式的选择 ET比LT对应用程序的要求更多,需要程序员设计的部分也更多,看上去LT好像要简单很多,但是当我们要求对fd有超时控制时,LT也同样需要对fds进行遍历,此时不如使用本来就要遍历的...而且由于epollwait每次返回的fds数量是有限的,在大并发的模式下,LT将非常的繁忙,所有的fds都要在它的队列中产生状态信息,而每次只有一部分fds能返回给应用程序。...event); epoll的事件注册函数, 注册要监听的事件类型: 参数说明: epfd epoll_create返回的句柄 op 表示动作,用3个宏表示:EPOLLCTLADD 注册新的fd到epfd...功能说明: 等侍注册在epfd(epoll生成的文件描述符)上的socket fd的事件的发生,如果发生则将发生的sokct fd和事件类型放入到events数组中。
level:选项定义的层次;支持SOLSOCKET、IPPROTOTCP、IPPROTOIP和IPPROTOIPV6 optname:需设置的选项,而有部分选项需在listen/connect调用前设置才有效...使用场景 (1)如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用close(socket)(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket...,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节(异步),系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据和接收数据量比较大,可以设置socket缓冲区...,系统就会设置多大,系统一般会将我们设置的缓冲区大小加倍,并且不得小于tcp的接收缓冲区和发送缓冲区设置的默认最小值。...注意:TCP有发送缓冲区和接收缓冲区,但是UDP因为是不可靠的,它没有确认重传机制,不保存应用程序数据的副本,所以是没有发送缓冲区的,但是UDP有接收缓冲区。
作者:陈皓 来源: https://blog.csdn.net/haoel/article/details/2872 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?...这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。...编程序很简单,但编出有质量的程序就难了。...用不了多久,连自己都不知道自己的意图了,还要花上几倍的时间才看明白,这种浪费别人和自己的时间的人,是最为可耻的人。 是的,你也许会说,你会写注释,真的吗?注释的书写也能看出一个程序员的功底。...有修养的程序员,就应该要学会写出这样的代码!这是任何一个想做编程高手所必需面对的细小的问题,编程高手不仅技术要强,基础要好,而且最重要的是要有“修养”!
它可比我介绍的详细得多得多,所以想了解Linux的简介,出门左拐找度娘哦。...编程作为一门跟计算机交流的语言;作为我们的操控计算机 偷懒 的工具,我总结了学习它有三个层面,第一个层面是:用了再说;第二个层面是:开始深入怎么用更好;第三个层面好奇它是怎么实现的。...我觉得入门就得从第一个层面开始实际的,往后深入再慢慢深耕。 准确来说,我不是带你学Linux,而是和你一起使用Linux,抱着学Linux总是枯燥的。...,去使用一下 cd:切换目录 更多cd操作,请看菜鸟教程里的cd操作 https://www.runoob.com/linux/linux-comm-cd.html ?...记住一颗剽悍种子说的。 与其学完就忘,不如直接当工具一样去使用。 孰能生巧,总会记住,忘了看Linux参考手册——Linux命令大全很香。 把我会的,认真的分享 是我写文章一直不变的信条。
posix消息队列的一个可能实现如下图: 其实消息队列就是一个可以让进程间交换数据的场所,而两个标准的消息队列最大的不同可能只是api 函数的不同,如system v 的系列函数是msgxxx,而posix...posix 消息队列也有一些对消息长度等的限制,man 7 mq_overview: simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$...二、系列函数,编译时候加上 -lrt 选项,即连接librt 库 (实时库) #include /* For O_* constants */ .../mq_send 1 mq_open succ simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$ 回头看..../mq_notify 的输出: simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$ .
在前面介绍了system v 共享内存的相关知识,现在来稍微看看posix 共享内存 和系列函数。...man 7 shm_overview 下面来看系列函数,编译时候加上 -lrt 选项,即连接librt 库 (实时库) 功能:用来创建或打开一个共享内存对象 原型 int shm_open(const... buf.st_size, buf.st_mode & 0777); close(shmid); return 0; } simba@ubuntu:~/Documents/code/linux_programming.../shm_open size=36, mode=664 simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$ ls -l /dev/.../shm_write size=36, mode=664 simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$ od -c /dev
从linux源码看socket的close 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。...上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本) TCP关闭状态转移图: 众所周知,TCP的close过程是四次挥手...出现大量close_wait的情况 linux中出现大量close_wait的情况一般是应用在检测到对端fin时没有及时close当前连接。有一种可能如下图所示: ?...总结 linux内核源代码博大精深,阅读其代码很费周折。之前读>的时候由于有先辈引导和梳理,所以看书中所使用的BSD源码并不觉得十分费劲。...直到现在自己带着问题独立看linux源码的时候,尽管有之前的基础,仍旧被其中的各种细节所迷惑。希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。
1、内核编程不能访问C库 2、内核编程时必须使用GNU C 3、内核编程时缺乏像用户空间那样的内存保护机制 4、内核编程时浮点数很难使用 5、内核只有一个很小的定长堆栈 6、由于内核支持异步中断,抢占和...SMP,因此必须时刻注意同步和并发 7、要考虑可移植性的重要性 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
simba@ubuntu:~/Documents/code/linux_programming/UNP/system_v$ ipcs -m ------ Shared Memory Segments...shmid owner perms bytes nattch status simba@ubuntu:~/Documents/code/linux_programming.../shm_write simba@ubuntu:~/Documents/code/linux_programming/UNP/system_v$ ipcs -m ------ Shared...simba@ubuntu:~/Documents/code/linux_programming/UNP/system_v$ ..../shm_read name = lisi age = 20 simba@ubuntu:~/Documents/code/linux_programming/UNP/system_v$ ipcs
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容...三、脚本语言 定义:为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。...shell脚本的优势在于处理操作系统底层的业务 (linux系统内部的应用都是shell脚本完成)因为有大量的linux系统命令为它做支撑。...2000多个命令都是shell脚本编程的有力支撑,特别是grep、awk、sed等。...注释部分不会被执行,仅给人看。注释可以自成一行,也可以跟在命令后面,与命令同行。要养成写注释的习惯,方便自己与他人。 最好不用中文注释,因为在不同字符集的系统会出现乱码。
前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌。在经历了数次物理机宕机之后,笔者详细的考察了在网络编程(tcp)中的各种超时设置,于是就有了本篇博文。...本文大部分讨论的是socket设置为block的情况,即setNonblock(false),仅在最后提及了nonblock socket(本文基于linux 2.6.32-431内核)。...java的SocketInputStream的sockRead0超时时间 java的超时时间由SO_TIMOUT决定,而linux的socket并没有这个选项。...定时器超时事件发生的时间如上面几小节所述,和是否nonblock无关。nonblock的编程模式可以让应用层对这些事件做出响应。...总结 网络编程中超时时间是个重要但又容易被忽略的问题,这个问题只有在遇到物理机宕机等平时遇不到的现象时候才会凸显。
Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。...使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。...注意:其实socket也没有层的概念,它只是一个facade设计模式的应用,让编程变的更简单。是一个软件抽象层。在网络编程中,我们大量用的都是通过socket实现的。...从应用程序的角度看,文件描述符是一个整数,应用程序可以用它来读写文件。下图显示,操作系统如何把文件描述符实现为一个指针数组,这些指针指向内部数据结构。 对于每个程序系统都有一张单独的表。...Socket编程实例 服务器端:一直监听本机的8000号端口,如果收到连接请求,将接收请求并接收客户端发来的消息,并向客户端返回消息。
背景 在学习ELF文件的过程中,看到Matrix中有类似于如下的代码来遍历ELF文件的e->phdr程序头表的内容。...而不是简单的地址加上对应的数字? 问题2:在for循环中,phdr_start_addr++为何能找到程序头表中的下一个段结构呢?...日志验证 在代码中加入日志,打印phdr的起始与结束地址,以及entry的总数与每个entry的大小。...*)的指针中进行运算,因为在运行的时候会有很多字节对齐的操作,如果没有指定类型的话,无法知道对应的结构体的大小,所以禁止(void *)指针的计算。...结论 对于地址的加减来说,可以正常按数加减,而且加减完后可以赋值给结构体指针。 而对于指针的加减来说,是对于指针对应的结构体大小而言的,每次加减都是计算的N个结构体大小的偏移。
使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。...注意:其实socket也没有层的概念,它只是一个facade设计模式的应用,让编程变的更简单。是一个软件抽象层。在网络编程中,我们大量用的都是通过socket实现的。...从应用程序的角度看,文件描述符是一个整数,应用程序可以用它来读写文件。下图显示,操作系统如何把文件描述符实现为一个指针数组,这些指针指向内部数据结构。 对于每个程序系统都有一张单独的表。...应用程序创建套接字后在该套接字可以使用之前,必须调用其他的过程来填充这些字段。 3、文件描述符和文件指针的区别: 文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。...详细内容请看linux文件系统:http://blog.csdn.net/hguisu/article/details/6122513#t7 4.
在有些时候数据会存在缓存中而没有写入磁盘中 数据同步考入磁盘 sync 2.关机重启指令 指令 内容 shutdown/halt/poweroff 关机 reboot 重启 3.运行级别 级别0 关机 级别1 相当于Windows的安全模式
看还有哪个家伙读成阻zu塞sai的,还有谁不会念? 你还真的点开链接啦? 今天真的是一趟语文课,就教会大家正确念这两个字的姿势,看: 兹z武u,阻zu。 丝s饿e,塞se。 阻塞。...这个道理跟Linux下读取慢速设备(主要指管道和套接字)数据的情形非常相似,例如当我们在读取一个管道时,如果管道里面没有数据,那么我们什么都读不出来,于是就进入了所谓的“阻塞”状态了,说白了阻塞就是使得当前进程或者线程睡眠了的意思...其中,读者指的是对管道文件拥有读权限的进程或线程(注意不是正在读),写者指的是对管道文件拥有写权限的进程或线程(注意不是正在写)。...除此之外,其实open()函数也会发生阻塞,比如用只读或者只写open一个管道文件的时候。因为一根只有出口或者只有入口的水管,是无法使用的呀!其实就是生活常识。嘿嘿!
今天笔者就来从Linux源码的角度看下Server端的Socket在进行bind的时候到底做了哪些事情(基于Linux 3.10内核)。...返回,若成功则为0,若出错则为-1 int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); 好了,我们直接进入Linux...这个特性在紧急重启以及线下调试的非常有用,建议开启。 SO_REUSEPORT SO_REUSEPORT是Linux在3.9版本引入的新功能。...鉴于此,Linux增加了SO_REUSEPORT,而之前bind中判断是否冲突的下面代码也是为这个参数而添加的逻辑: if(!reuseport || !...https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/ 总结 Linux内核源码博大精深,一个看起来简单的bind系统调用竟然牵涉这么多
领取专属 10元无门槛券
手把手带您无忧上云