之前发的在公众号上代码阅读体验不佳,所以排版后重新发布。 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有接收缓冲区。
posix消息队列的一个可能实现如下图: 其实消息队列就是一个可以让进程间交换数据的场所,而两个标准的消息队列最大的不同可能只是api 函数的不同,如system v 的系列函数是msgxxx,而posix...posix 消息队列也有一些对消息长度等的限制,man 7 mq_overview: simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$...还有一点是,在Linux上,posix 消息队列是以虚拟文件系统实现的,必须将其挂载到某个目录才能看见,如 # mkdir /dev/mqueue #...二、系列函数,编译时候加上 -lrt 选项,即连接librt 库 (实时库) #include /* For O_* constants */ .../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网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。...一、UDP通信中服务端和客户端的基本编程框架 与TCP相比较,UDP是面向无连接的通信方式,不需要connect、listen、accept等函数操作,不用维护TCP的连接、断开等状态。...addr中的信息,确实一个错误的IP信息或者0.0.0.0这样的地址信息,这是什么原因呢,在那个男人的中的描述,有如下的一段话 总结来说,就是我们必须初始化addr_size的长度,如果设置的长度比...3.2、组播的使用 组播在基本UDP编程框架的基础上,使用setsockopt()函数和getsockopt()函数来实现,需要设置IP层的相关参数(第二个参数为 IPPROTO_IP),其原型如下:...:加入或者退出一个组播组其参数为一个结构体 使用组播的一个基本编程流程如下: 3.3 使用组播的服务端和客户端例子 (TBD) 三、UDP中广播的使用 UDP广播与普通的UDP通信区别不是很大,如果需要发送广播消息时
1、内核编程不能访问C库 2、内核编程时必须使用GNU C 3、内核编程时缺乏像用户空间那样的内存保护机制 4、内核编程时浮点数很难使用 5、内核只有一个很小的定长堆栈 6、由于内核支持异步中断,抢占和...SMP,因此必须时刻注意同步和并发 7、要考虑可移植性的重要性 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
大家好,又见面了,我是你们的朋友全栈君。 文章目录 前言 一、UDP是什么 二、UDP 数据报服务特点 二、UDP 编程流程 1.服务器 2.客户端 3.输出结果 总结 前言 浅谈UDP。...提示:以下是本篇文章正文内容,下面案例可供参考 一、UDP是什么 UDP是一种不可靠的、无连接的、数据报服务。...并且,如果用户没有指定足够的应用程序缓冲区来读取 UDP 数据,则 UDP 数据将被截断。 因此,采用UDP协议时必须要求接收端可以一次性收取完发送端一次发送的数据,不然就会造成数据丢失。...二、UDP 编程流程 1.服务器 代码如下(示例): int main() { int sockfd = socket(AF_INET,SOCK_DGRAM,0); assert( sockfd...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
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脚本的内容...每一个合格 的Linux系统管理员或运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅 读系统及各类软件附带的Shell脚本内容。...三、脚本语言 定义:为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。...shell脚本的优势在于处理操作系统底层的业务 (linux系统内部的应用都是shell脚本完成)因为有大量的linux系统命令为它做支撑。...2000多个命令都是shell脚本编程的有力支撑,特别是grep、awk、sed等。
Linux的SOCKET编程详解 1. 网络中进程之间如何通信 进 程通信的概念最初来源于单机系统。...使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。...注意:其实socket也没有层的概念,它只是一个facade设计模式的应用,让编程变的更简单。是一个软件抽象层。在网络编程中,我们大量用的都是通过socket实现的。...应用程序创建套接字后在该套接字可以使用之前,必须调用其他的过程来填充这些字段。 3、文件描述符和文件指针的区别: 文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。...Socket编程实例 服务器端:一直监听本机的8000号端口,如果收到连接请求,将接收请求并接收客户端发来的消息,并向客户端返回消息。
使用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....具体如何实现,可以看看linux的内核 4.1、socket()函数 int socket(int protofamily, int type, int protocol);//返回sockfd
背景 在学习ELF文件的过程中,看到Matrix中有类似于如下的代码来遍历ELF文件的e->phdr程序头表的内容。...而不是简单的地址加上对应的数字? 问题2:在for循环中,phdr_start_addr++为何能找到程序头表中的下一个段结构呢?...日志验证 在代码中加入日志,打印phdr的起始与结束地址,以及entry的总数与每个entry的大小。...*)的指针中进行运算,因为在运行的时候会有很多字节对齐的操作,如果没有指定类型的话,无法知道对应的结构体的大小,所以禁止(void *)指针的计算。...结论 对于地址的加减来说,可以正常按数加减,而且加减完后可以赋值给结构体指针。 而对于指针的加减来说,是对于指针对应的结构体大小而言的,每次加减都是计算的N个结构体大小的偏移。
看还有哪个家伙读成阻zu塞sai的,还有谁不会念? 你还真的点开链接啦? 今天真的是一趟语文课,就教会大家正确念这两个字的姿势,看: 兹z武u,阻zu。 丝s饿e,塞se。 阻塞。...这个道理跟Linux下读取慢速设备(主要指管道和套接字)数据的情形非常相似,例如当我们在读取一个管道时,如果管道里面没有数据,那么我们什么都读不出来,于是就进入了所谓的“阻塞”状态了,说白了阻塞就是使得当前进程或者线程睡眠了的意思...其中,读者指的是对管道文件拥有读权限的进程或线程(注意不是正在读),写者指的是对管道文件拥有写权限的进程或线程(注意不是正在写)。...除此之外,其实open()函数也会发生阻塞,比如用只读或者只写open一个管道文件的时候。因为一根只有出口或者只有入口的水管,是无法使用的呀!其实就是生活常识。嘿嘿!
Linux Socket编程 ---- 目录 前言 Socket的功能 Socket基础 Socket类型 基本结构 基本转换函数 基本Socket使用 TCP Socket实例 UDP Socket实例...疑难问题记录 总结 ---- 前言 socket(套接字)是网络编程编程的一种技巧。...本篇不涉及太底层的网络原理,仅说明socket的基本使用方法。主要参考《Linux网络编程》。本篇源码获取方式见文底小字。...所以每次调用 inet_ntoa(),都会改变最后一次调用 inet_ntoa() 函数时得到的结果。 基本Socket使用 Linux同时支持面向连接和不连接类型的套接字。...网络编程非常有趣,能够实现天南海北之间的通讯,让远距离的人与人、人与物或者物与物之间产生联系,很有意思! 最后 用心感悟,认真记录,写好每一篇文章,分享每一框干货。
系统编程 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.Linux 背景介绍 说起Linux,我们必须先要提起UNIX UNIX 发展的历史 1968 年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫...随着Linux操作系统飞速发展,各种集成 在Linux上的开源软件和实用工具也得到了应用和普及,因此, Linux也成为了开源软件的代名词。...但是,从系统的整体功能、性能来看, Linux桌面系统与Windows系列相比还有一定 的差距,主要表现在系统易用性、系统管理、软硬件兼容性、软件的丰富程度等方面。...Linux在移动嵌入式领域的发展 Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目 前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域...Linux在云计算/大数据领域的发展 互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展,云计算、大数据作为一个基于开源 软件的平台, Linux占据了核心优势;据Linux基金会的研究, 86%
Linux进程编程 3.1 fork系统调用 3.1.1 fork工作原理 3.1.2 fork函数 3.1.3 fork编程示例 3.1.4 小结 3.2 exec系统调用 3.2.1 exec函数族作用...执行过程如下: Linux内核在进程表中为子进程分配一个表项,然后分配PID。...子进程表项的内容来自父进程,fork会将父进程的表项复制为副本,并分配给子进程; Linux内核使父进程的文件表和索引表的节点自增1,创建用户及上下文; 将父进程上下文复制到子进程上下文空间中; fork...这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。...我们应该明白了,Linux下是如何执行新程序的,每当有进程认为自己不能为系统和用户做出任何贡献了,他就可以发挥最后一点余热,调用任何一个exec,让自己以新的面貌重生;或者,更普遍的情况是,如果一个进程想执行另一个程序
注意: 在 i386 平台上 Red Hat Linux 的 页面大小 为 4096 字节。但是,您可以使用 bigpages ,它支持配置更大的内存页面尺寸。...,套接字编程应用则更为广泛,可用于不同机器之间的通讯。...网络的两端都建立一个socket对象,然后通过socket对象进行数据的传输。《unix网络编程卷一》对socket编程有详细的介绍。...也属于进程动态分配的内存. 32位就是4G的寻址空间,linux将其分为两部分,虚拟地址从0xC0000000到0xffffffff用于内核,为系统空间。较低的3G字节为用户空间。...而线程的栈空间大小在linux下可以使用ulimit -s查询,我的环境下默认是8192字节。windows下一说默认1M,一说2M。
领取专属 10元无门槛券
手把手带您无忧上云