![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c研究
文章平均质量分 76
此专栏来自于https://home.cnblogs.com/u/webor2006/,由于导博客这个专栏的导失败了,则手动一个个创建到这里了~~N年前写的~~
webor2006
码农一个,记录个人成长的点滴~~
展开
-
linux网络编程之socket编程(十一)
今天继续学习socket编程,这次主要是学习超时方法的封装,内容如下:①、alarm【不常用,了解既可】它的实现思路是这样的:但是这种方案有一定的问题,因为闹钟可能会作为其它的用途,这时所设置的闹钟跟其它用途的闹钟会产生冲突,而这些冲突的解决,会比较麻烦,这里就不多讨论了,因为不使用它,仅了解既可,是不会用闹钟的方式来实现超时的。②、套接字选项【不常用,了解既可】 ...原创 2014-11-08 13:53:00 · 96 阅读 · 0 评论 -
linux网络编程之socket编程(十)
今天继续socket编程的学习,最近晚上睡觉都没有发热,没有暖气的日子还是种煎熬,快乐的十一也已经走来,幸福有暖气的日子也快啦,好了,回到正题~①close终止了数据传送的两个方向。②shutdown可以有选择的终止某个方向的数据传送或者终止数据传送的两个方向。但是,在实际应用中,可能会遇到这样一个情况,既使我们关闭了其中的某一端应用,但对于先前发送出去的数据能够得到对方的应答,下面可以...原创 2014-11-04 22:57:00 · 72 阅读 · 0 评论 -
linux网络编程之socket编程(九)
转眼又快到十一月份了,北京已经是完全进入冬天的节奏,外面冷风嗖嗖的,不过在夜深人静之时,学习永远成了我最快乐的时光,只有此时会觉得自己是如此踏实,虽说白天工作也是编一天程,但是此时的编程,是一种业余爱好,而非是生活所迫,非常享受它,好了,让享受继续。继上次学习了select函数,这次继续对它的用法进行进一步学习,下面就首先先来回顾一下该函数:上面是函数的原形,下面用理论阐述一下它,它可以...原创 2014-10-27 21:49:00 · 70 阅读 · 0 评论 -
linux网络编程之socket编程(八)
学习socket编程继续,今天要学习的内容如下:先来简单介绍一下这五种模型分别是哪些,偏理论,有个大致的印象就成,做个对比,因为最终只会研究一个I/O模型,也是经常会用到的,阻塞I/O:先用一个图来描述它:实际上,之前我们使用的套接口I/O编程都是用该模型,针对上面的图进行说明一下:一旦套接口连接成功之后,就可以recv数据了,如下:会向系统发起请求来接收数据,而这个recv请求...原创 2014-10-17 07:52:00 · 97 阅读 · 0 评论 -
linux网络编程之socket编程(七)
今天继续学习socket编程,北京在持续几天的雾霾天之后久违的太阳终于出来了,心情也特别特别的好,于是乎,在这美好的夜晚,该干点啥事吧,那当然就是继续坚持我的程序学习喽,闲话不多说,进入正题:通过这个状态的学习,进一步复习一下“连接建立三次握手、连接终止四次握手【下面会分别来介绍】”,下面首先来看一张图:从图中可以数一下,总共有“LISTEN、SYN_SENT、SYN_RCVD、ESTA...原创 2014-10-13 21:31:00 · 79 阅读 · 0 评论 -
linux网络编程之socket编程(六)
经过一个国庆长假,又有一段时间没有写博文了,今天继续对linux网络编程进行学习,如今的北京又全面进入雾霾天气了,让我突然想到了一句名句:“真爱生活,珍惜生命”,好了,言归正传。回顾一下我们之间实现在TCP回射客户/服务器程序,首先回顾一下第一个版本:TCP客户端从stdin获取(fgets)一行数据,然后将这行数据发送(write)到TCP服务器端,这时TCP服务器调用read方法来接...原创 2014-10-09 22:11:00 · 72 阅读 · 0 评论 -
linux网络编程之socket编程(五)
今天继续学习socket网络编程,最近北京阴雨连绵,降温明显,感觉是要立马转入冬季的节奏,天冷晚上得注意多盖点被子哦,言归正传,进入正题:对于之前写的回射客户/服务器端的程序中,我们是用的read和write来读取和发送数据的,如下:那recv相对于read有什么区别呢?先看一下man帮助:其实它跟read函数功能一样,都可以从套接口缓冲区sockfd中取数据到buf,但是recv仅...原创 2014-09-23 21:30:00 · 100 阅读 · 0 评论 -
linux网络编程之socket编程(四)
经过两周的等待,终于可以回归我正常的学习之旅了,表哥来北京了在我这暂住,晚上回家了基本在和他聊天,周末带他在北京城到处乱转,几乎剥夺了我自由学习的时间了,不过,亲人之情还是很难得的,工作学习并不是生活的唯一,现在已经习惯每周至少写一篇博文的生活了,如果一周不写会觉得缺少什么似的,好了,话不多说,继续学习linux网络编程socket相关的知识:流协议与粘包:关于什么是粘包可能有些抽象,先得有...原创 2014-08-30 16:28:00 · 103 阅读 · 0 评论 -
linux网络编程之socket编程(三)
今天继续对socket编程进行学习,在学习之前,需要回顾一下上一篇中编写的回射客户/服务器程序(http://www.cnblogs.com/webor2006/p/3923254.html),因为今天的知识点需要基于它来进行说明,下面来回顾一下关键代码:对于服务器端:echosrv.c对于客户端:echocli.c下面通过一个简单的图来描述一下其关系:可想而知,这两个套接字都有...原创 2014-08-24 16:39:00 · 100 阅读 · 0 评论 -
linux网络编程之socket编程(二)
今天继续对socket编程进行研究,这里会真正开如用socket写一个小例子,进入正题:TCP客户/服务器模型:关于这个模型的流程这里就不多说了,比较容易理解,下面则利用这种模型来编写一个实际的例子。回射客户/服务器:这个例子的效果就是:客户端从命令行获取一行命令,然后发送给服务器端,当服务端接收到这行命令之后,不做任何操作,将其又回送给客户端,然后客户端进行回显,下面则开始一步步...原创 2014-08-19 22:24:00 · 120 阅读 · 0 评论 -
linux网络编程之socket编程(一)
今天开始,继续来学习linux编程,这次主要是研究下linux下的网络编程,而网络编程中最基本的需从socket编程开始,下面正式开始学习:什么是socket:在学习套接口之前,先要回顾一下Tcp/Ip四层模型:而在说明什么是Socket之前,需要理解下面这些图:而实际上:所以:另外:这跟管道是不同的,管道只能用于本机的进程间通信。另外socket能用于异构系统间进行通信...原创 2014-08-11 22:20:00 · 78 阅读 · 0 评论 -
linux系统编程综合练习-实现一个小型的shell程序(四)
上节中已经对后台作业进行了简单处理,基本上要实现的功能已经完了,下面回过头来,对代码进行一个调整,把写得不好的地方梳理一下,给代码加入适当的注释,这种习惯其实是比较好了,由于在开发的时候时间都比较紧,都只是想办法去尽快实现,而肯定会有一些代码是写得不太好的,所以有时间的话最好是从头至尾将整个代码进行梳理,也许在梳理的过程中会发现许多不足的地方,好了,下面开始:而这个信号安装函数是在init....原创 2014-08-03 15:49:00 · 93 阅读 · 0 评论 -
linux系统编程综合练习-实现一个小型的shell程序(三)
上节中已经实现了对普通命令的解析,包括输入重定向,输出重定向,管道,后台作业,这次就来执行已经解析好的命令,对应的函数为:execute_command(),首先对带有管道的命令进行执行:比如:"ls | grep init | wc -w"这条命令,有两条管道,其中最后一条命令是不需要管道的:【说明】:对于管道的创建,可以参考博文:http://www.cnblogs.com/webor...原创 2014-07-22 22:27:00 · 95 阅读 · 0 评论 -
linux系统编程综合练习-实现一个小型的shell程序(二)
上节minishell当中,已经初步实现了一个简单命令的解析,这节来继续对更加复杂命令进行解析,包含:输入重定向的解析、管道行的解析、输出重定向的解析以及是否有后台作业的解析,如下:下面对其进行实现,上节中实现了对单条命令的解析,如下:这节因为是多条,所以解析命令的实现也得重新开始写,在写之前,先列一个实现步骤:先写一个流程伪代码,交其框架定出来,然后再去实现一个个功能函数,最后整个...原创 2014-07-17 22:26:00 · 117 阅读 · 0 评论 -
linux系统编程综合练习-实现一个小型的shell程序(一)
之前已经花了不少篇幅学习了linux系统编程的很多知识点:文件与io、进程、信号、管道,而零散的知识点,怎么能够综合的串接起来是学习的一个很重要的目的,当然最好的方式就是用所学的知识点做一个项目了,所以接下来会实现一个小型的迷你shell程序,跟缩减版的系统shell程序,不要看着项目很小,但是五脏俱全,先来看一下我们要实现的功能:如exit会退出程序等。另外还能捕捉一些信...原创 2014-07-06 14:18:00 · 181 阅读 · 0 评论 -
linux系统编程之管道(三)
今天继续研究管道的内容,这次主要是研究一下命名管道,以及与之前学过的匿名管道的区别,话不多说,进入正题:所以说,我们要知道命名管道的作用,可以进行毫无关系的两个进程间进行通讯,这是匿名管道所无法实现的。下面来用命令创建一下:用程序来创建:另外管道文件是一种特珠类型的文件,所以不能用vim去像文本文件去编辑也可以能过man帮助来查看到:下面用一个实际的例子来说明下:...原创 2014-06-15 10:42:00 · 75 阅读 · 0 评论 -
linux系统编程之管道(二)
今天继续研究管道,话不多说,言归正传:对于管道,有一定的读写规则,所以这里主要是对它的规则进行探讨,具体规则如下:规则一:下面用程序来验证下,还是用上节学的子进程写数据,父进程读取数据的例子,只是基于这个程序进行修改来解释上面的理论,先看一下这个原程序:#include <unistd.h>#include <sys/stat.h>#include <...原创 2014-06-08 21:50:00 · 77 阅读 · 0 评论 -
linux系统编程之管道(一)
今天继续研究linux系统编程,继上次对信号进行研究之后,这次开始一个新的章节-----管道,在正式开始之前,先把今天让自己很激动的事说一下,小小的兴奋,经过下周后自己的创业产品用户量就有一个质的飞越了,百万级的,虽说离最终的目标还有很远,但是,这说明自己团队最近几个月的辛苦付出是值得的,也让自己对这次的创业更加有期待了,小小骄傲一下,我的学习任务还得继续坚持,谁叫咱是搞技术的呢,言归正传,正入正题:什么是管道:实际上,我们在linux中经常会用到带"管道"的命令,如:那管道的本原创 2021-10-22 17:39:10 · 427 阅读 · 0 评论 -
linux系统编程之信号(七)
今天继续学习信号,主要是学习关于时间和定时器相关的函数的使用,关于这个实际上有很多内容,这里先简要进行说明,等之后再慢慢进行相关深入,也主要是为接下来要做的一个综合linux系统编程的例子做准备,好了,进入正题:三种不同精度的睡眠:关于这个函数,实际上已经在之前使用过了,具体可以参考博文:http://www.cnblogs.com/webor2006/p/3525517.html查看m...原创 2014-06-01 10:03:00 · 71 阅读 · 0 评论 -
linux系统编程之信号(六)
今天继续学习信号相关的知识,主要还是学习sigqueue另外信号发送函数,并配合上节学习的sigaction的用法,进入正题:sigqueue函数:sigval联合体:实际上sigval参数是用来进程间通信用的,实际上信号是一个很古老的进程间通信的一种手段,通过这个参数,可以从一个进程发送到另外一个进程,并且可以附带参数。下面以实际代码来说明sigqueue是如何传递数据的:这里需...原创 2014-05-28 22:32:00 · 69 阅读 · 0 评论 -
linux系统编程之信号(五)
今天继续对信号进行学习,开始正入正题:sigaction函数:安装信号之前我们已经学过一个函数:signal,它最早是在unix上出现的,它是对不可靠信号进行安装的,之后出现了可靠信号和实时信号,所以新的安装函数sigaction函数就出现了,它的原形如下:sigaction结构体:通过man手册来查看一下它的说明:关于这些说明,下面会用实验一一来阐述的,所以可以先了解一...原创 2014-05-26 22:00:00 · 75 阅读 · 0 评论 -
linux系统编程之信号(四)
今天继续探讨信号相关的东东,话不多说,正入正题:信号在内核中的表示:下面用图来进一步描述这种信号从产生到递达之间的状态(信号阻塞与未诀):那是怎么来决定的呢?下面慢慢来举例分解:所以,通过这些图,可以描述信号从产生到递达的一个过程,上面的理解起来可能有点难,下面会用代码来进一步阐述,在进行实验之前,还需了解一些函数的使用,这些函数在实验中都会被用到,也就是信号集操作函数。...原创 2014-05-25 15:02:00 · 84 阅读 · 0 评论 -
linux系统编程之信号(三)
今天继续对信号进行研究,话不多说,言归正传:更多信号发送函数:上节中我们已经接触到了一些信号的发送函数,这里更进一步学习一下其它的发送函数:alarm:只能发送SIGALRM信号下面通过一个例子来介绍这个函数:#include <unistd.h>#include <sys/stat.h>#include <sys/wait.h>...原创 2014-05-21 22:29:00 · 71 阅读 · 0 评论 -
linux系统编程之信号(二)
经过了漫长的间歇,对于c语言的学习也被中断了很久,现实确实有很多的无耐,计划中的事情总会被打乱,但不管怎样,学习的道路是不能休止的,所以经过了一断温习后现在继续学习C语言,话不多说,进入正题:信号分类可靠信号与不可靠信号不可靠信号:linux信号机制基本上是从unix系统中继承过来的。早期unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它...原创 2014-01-18 21:38:00 · 60 阅读 · 0 评论 -
linux系统编程之信号(一)
今天起,开始新的知识的学习,对于上个系列进程的学习还差一个理论上的总结,这个会下次补回来,以便通过实践之后,再用理论将其巩固一下,好了,话不多说,开始进入这个主题的学习----信号,很重要,但不是太容易理解,所以得一步一步来!中断【纯概念,但是很重要】:在学习信号之前,首先需要理解一下什么是中断,因为信号与中断有很多的相似之处,中断,顾名思义就是中途打断:那什么是异步事件呢?它是没有一定...原创 2014-01-12 09:14:00 · 78 阅读 · 0 评论 -
linux系统编程之进程(五)
今天继续学习系统编程,学习的主题还是进程,今天主要讨论的是守护进程相关的概念,开始进入正题:什么是守护进程:守护进程的创建步骤:在描述它之前,首先得先了解两个概念:进程组、会话期:而它里面有bash shell进程组,里面只有bash进程:这时,当我们在shell命令行中敲入如下命令:这时,会话期中又会多出一个进程组,如下:而一个会话期,实际上就对应一个终端,当我们...原创 2014-01-10 22:17:00 · 61 阅读 · 0 评论 -
linux系统编程之进程(四)
今天继续研究进程相关的东东,话不多说,进入正题:SIGCHLD:关于它,之前章节的学习中已经用到了,具体可以参考博文:http://www.cnblogs.com/webor2006/p/3500972.html,这里会进一步来理解它:【说明:关于信号,很快就会有一个专题来仔细研究它,现在可以简单认为:它是一种异步通知事件】【说明:如果父进程没有查询子进程的退出状态,子进程是没有办法...原创 2014-01-09 20:53:00 · 97 阅读 · 0 评论 -
linux系统编程之进程(三)
今天继续学习进程相关的东东,继上节最后简单介绍了用exec函数替换进程映像的用法,今天将来深入学习exec及它关联的函数,话不多说,正式进入正题:exec替换进程映象:对于fork()函数,它创建了一个新进程,新进程与原进程几乎是一样的,而对于shell命令,如:对于shell命令,它本身就是一个进程,要想执行ls程序,则需去加载ls程序,这时shell命令进程则需fork()创建一个...原创 2014-01-06 21:41:00 · 88 阅读 · 0 评论 -
linux系统编程之进程(二)
今天继续学习进程相关的东东,上节提到了,当fork()之后,子进程复制了父进程当中的大部分数据,其中对于打开的文件,如果父进程打开了,子进程则不需要打开了,是共享的,所以首先先来研究下共享文件这一块的东东:fork之后父子进程共享文件:首先先通过其原理图来了解一下什么是父子进程共享文件:父进程打开两个文件:这时通过fork()函数新建了一个子进程,这时它共享父进程的文件,其结构如下:...原创 2014-01-05 13:24:00 · 75 阅读 · 0 评论 -
linux系统编程之进程(一)
今天起,开始学习linux系统编程中的另一个新的知识点----进程,在学习进程之前,有很多关于进程的概念需要了解,但是,概念是很枯燥的,也是让人很容易迷糊的,所以,先抛开这些抽象的概念,以实际编码来熟悉进程到底是个什么东东,这样学习起来要有兴趣一些,在学习一门技术时,找一种能提高自己兴趣的方法是很重要的,这也是我自己学习的一个比较"典型"的学习流程吧,关于不太清楚的概念会在实验中一一阐述(当然不...原创 2014-01-01 21:26:00 · 66 阅读 · 0 评论 -
linux系统编程之文件与io(五)
上一节中已经学习了文件描述符的复制,复制方法有三种,其中最后一种fcntl还并未使用到,关于这个函数,不光只有复制文件描述符的功能,还有其它一些用法,本节就对其进行一一剖析:fcntl常用操作:这里,我们将上节当中用dup或dup2实现复制文件描述符改用fcntl,程序如下:先将test2.txt的内容清空,以便进行测试,编译运行:通过man来查看下它的说明:【说明:关于...原创 2014-01-01 08:29:00 · 64 阅读 · 0 评论 -
linux系统编程之文件与io(四)
今天继续学习文件与io,主要是学习文件共享及文件、复制文件描述符,有点抽象,主要是概念上的理解,但是很重要,下面一一来分解:文件共享:回顾一下,在linux系统调用中,是通过文件描述符来访问文件的,文件描述符是一个非负的整数,这是站在用户的观点来看的,实际上在linux内核上是有一定的数据结构来表示文件描述符的,下面就从三方面来看图分析一下内核中是怎么来表示打开的文件的:一个进程打开两个文...原创 2013-12-30 21:05:00 · 67 阅读 · 0 评论 -
linux系统编程之文件与io(三)
上次我们利用文件的read和write来实现了简易的cp命令,其中将源文件拷贝到目标文件时,我们给目标文件的权限是写死的,而非根据源文件的权限生成的,如下:今天就来解决这个问题,来学习获取文件权限相关的函数,言归正传,正入正题。stat:功能:读取文件元数据关于stat结构体的结构如下:struct stat { dev_t st_dev; /* ID ...原创 2013-12-29 13:27:00 · 61 阅读 · 0 评论 -
linux系统编程之文件与io(二)
今天继续学习文件与io,话不多说,开始进入正题:文件的read和write系统调用:说明:函数中出现在size_t和ssize_t是针对系统定制的数据类型:下面以一个实现文件简单拷贝的示例(类似于cp命令,但是没cp命令强大),来对其文件的读写有个感性的认识:#include <unistd.h>#include <sys/types.h>#inc...原创 2013-12-26 22:38:00 · 75 阅读 · 0 评论 -
linux系统编程之文件与io(一)
经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自己亲自验证过的,我机智不算聪明,所以也没必要去校仿那些“大脑非常聪明”的理解能力很强的“高人”,也许我之前学的那些基础知识在别人来说可能也就一周就完全通了,甚至比你还要理解得透,那我只能“羡慕”,“...原创 2013-12-23 16:54:00 · 63 阅读 · 0 评论 -
指针应用-----链表三
今天接着对链表进行进一步完善,对于上节中已经实现了对节点的删除操作,这次对这个操作进行升级,符合条件的都可以被删除(通过函数指针来实现),具体实现如下:list.c:#ifndef _LIST_H_#define _LIST_H_#include <assert.h>typedef struct node{ int data; struct node...原创 2013-12-21 22:29:00 · 70 阅读 · 0 评论 -
指针应用-----链表二
今天继续完善自己的链表,上次已经实现了链表的插入、遍历、销毁方法,对于链表的插入,我们上次是在头结点进行插入的,这次,我们来实现一个在任意结点进行插入的方法。实现链表的另外一种插入方法----在任意位置进行插入:在实现它之前,先实现获取任意位置的结点的函数,为便在实现任意插入时会使用到它,先在头文件中定义:list.h:#ifndef _LIST_H_#define _LIST_H...原创 2013-12-21 09:35:00 · 71 阅读 · 0 评论 -
指针应用-----链表一
在于C语言指针的相关知识点算是已经学得差不多了,当然,语言的学习是一个终生的,所以还需慢慢去学习,今天就以一个非常经典,也是体现指针应用的一个例子,来操作练一下所学的指针相关的知识点-----链表对于链表,我想学过编程的应该都对它有比较清楚的了解,下面简单对它进行回顾一下:链表的基本操作:下面自己动手利用指针的知识一点一点来实现链表,同时学习一下C语言多文件的编译风格:第一步:搭建...原创 2013-12-18 21:21:00 · 75 阅读 · 0 评论 -
指针(六)
今天继续对指针进行探讨,请看下面:函数指针:下面通过一个程序,简单明了的对函数指针有个基本认识:#include <stdio.h>void test(int n){ printf("test %d ...\n", n);}int main(void){ void (*f)(int); // 这里的f就是函数指针变量 void ...原创 2013-12-17 21:10:00 · 70 阅读 · 0 评论 -
指针(五)
今天继续对于C语言的指针进行学习,话不多说,进入正题。数组作为参数传递【指针传递】:下面通过一系列程序来说明数组作为参数传递是属于指针传弟:一维数组:编译运行,看结果:编译运行:我们知道“数组定义之后,它的首地址是无法重新指向新地址的”,如下:编译:而请看如下情况:编译运行:说明:当一维数组作为函数参数时,有三种写法都等价,都是int*a二维数组:编...原创 2013-12-16 21:01:00 · 81 阅读 · 0 评论