Lightsing Blog

所思所想

Unix网络编程 - V1 - Day 07

Unix下的多进程:fork与exec

本文内容仅为多进程的部分内容,更详细的内容见《Unix环境高级编程》 第8章 进程控制 Unix多进程 以下正文中函数定义于<unistd.h> fork函数 fork函数是Unix中相当经典的一个函数,很多书中都用这么一句话来描述它: fork函数被调用一次却返回两次,一次在父进程中,一次在子进程中 fork函数在父进程中返回的是子进程的进程ID,而...

聊聊别的

我为什么在学习底层开发

纯属瞎扯 有人问我为什么要学这种“没啥用的”东西….明明其他语言会提供更为简单的实现写法 比如我很爱的Python,提供了 socket 库,只需要短短几行就可以迅速写出一个TCP Server。的确,我也知道这样非常方便,我也享受Python带来的便捷。但是所有的这些仅仅是为了速度和便捷。 如果不是很严谨的讲的话,我学习的第一门语言是C。丝毫不夸张的说,C带给我的影响绝对是最...

Unix网络编程 - V1 - Day 06

初窥TCP套接字编程 I

基本TCP套接字函数 socket() 定义于<sys/socket.h> int socket(int family, int type, int protocol); 这个函数用于指定该进程所期望的通信类型(使用何种地址族、使用何种协议)。 函数可用的参数如下: family 描述 ...

Unix网络编程 - V1 - Day 05

套接字基本函数

地址转换函数 IPv4地址转换函数 定义于<arpa/inet.h> int inet_aton(const char *strptr, struct in_addr *addrptr); in_addr_t inet_addr(const char *strptr); char *inet_ntoa(struct in_addr inaddr); inet_ato...

Unix网络编程 - V1 - Day 04

字节序与套接字结构

字节序问题 在正式开始今天的内容之前,我们需要关注一个问题:数据在内存中是怎样存储的? 即——字节序(Endianness)问题。 小端序与大端序 我们知道,一个变量很可能有多个字节,如int,double。它被称作多字节对象,几乎在所有的电脑上,这种对象在内存中都是连续存储的。 例如有一个int x(以4字节为例),它的地址是0x100,这意味着这个变量被存储在了0x100~0x103...

Unix网络编程 - V1 - Day 03

TCP 与 UDP

用户数据报协议 UDP 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。 UDP客户可以通过一个套接字向多个服务器发送数据报,同样的UDP服务器也可以通过一个套接字接受来自不同客户的消息。 虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。 传输控制协议 TC...

Digital native 数字原住民

数字世界是我们的另一部分

那是一种与生俱来的天赋,就好像矮人天生擅长舞锤,而精灵则拥有魔法庇护。那些数字时代的原住民们,天生具备着一种操纵数字世界的领悟。 前言 从 2010 年 iPhone 4 横空出世席卷中国,到时隔不到半月的 Apple 2015 发布会。短短几年里,身边就几乎再也看不到“非智能手机”的身影了。 想想发布那时(2010.6.8),博主应该还是一个高一小屁孩,等着暑假快点到来。虽然...

Unix网络编程 - V1 - Day 02

TCP/IP简介与网络模型

TCP/IP 简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多。 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容,这就好比一群人有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了。 为了把全世界的所有不同类型的计算机都连接起来,...

Unix网络编程 - V1 - Day 01

配置开发环境 Compile and Go

配置开发环境 在这本书中,作者给出了大量的例程,为了方便后续的学习,我们要把一些书中引用的库编译出来并配置好编译环境。 这本经典之作的官网是 Unix Network Programming ,我们可以在Sorce Code页面下载到本书所用到的所有源码 点我下载 编译所需的库 本例中的编译环境: gcc version 5.4.0 20160609 (Ubuntu 5.4.0...

Unix Network Programming 系列教程

非常水的自我笔记

自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了。 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信。网络编程就是如何在程序中实现两台计算机的通信。 举个例子,当你使用浏览器访问新浪网时,你的计算机就和新浪的某台服务器通过互联网连接起来了,然后,新浪的服务器把网页内容作为数据通过互联网传输到你的电脑上。 由于你的电脑上可能不止浏览器,还有QQ...