
LINUX C
文章平均质量分 73
ryan_jianjian
这个作者很懒,什么都没留下…
展开
-
exec函数族
1、execl函数作用:执行一个文件函数原型:int execl(const char *path,const char*arg,......);头文件:#include返回值:① 执行成功,函数无返回值。② 执行出错,返回-1。可用perror()函数打印错误信息。参数:path:代表文件路径arg:表示argv[0],argv[1],.......(各原创 2016-10-21 23:45:29 · 252 阅读 · 0 评论 -
聊天室-界面-curses
1. curses 的历史与版本: cureses 最早是由柏克莱大学的 Bill Joy 及 Ken Arnold 所发展出来的. 当时发展此一函式库主要原因是为了提高程式对不同终端机的相容性而设计的. 因此, 利用 curses 发展出来的程式将和您所使用的终端机无关. 也就是说, 您不必担心您的程式因为换了一部终端机而无法使用. 这对程式设计师而言, 尤其是网路上程式的撰写,转载 2016-11-26 23:25:53 · 1573 阅读 · 0 评论 -
进程与线程
首先来一句概括的总论:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。下面细说背景:CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个原创 2016-12-08 23:04:56 · 273 阅读 · 0 评论 -
多线程的聊天室实现-服务器端
服务器端的主要功能: 实现多用户群体聊天功能(此程序最多设定为10人,可进行更改),每个人所发送的消息其他用户均可以收到。用户可以随意的加入或退出(推出以字符串“bye”实现),服务器也可以进行关闭。 服务器端的程序结构: 总共有三个函数:主函数(main),实现服务器端的初始化,接受连接;消息处理函数(rcv_snd),接受某一用户的消息,将其进行简单处理之后发送给其他所有的用户;退转载 2016-11-24 23:27:40 · 723 阅读 · 0 评论 -
fork()进阶点
#include int main(int argc, char* argv[]) { fork(); fork() && fork() || fork(); fork(); printf("+/n"); } 答案是总共20个进程,除去main进程,还有19个进程。 我们再来仔细分析一下,为什么是还有19个进程原创 2016-12-13 22:07:26 · 287 阅读 · 0 评论 -
LINUX网络服务器
一、在之前设计的网络编程服务器中,涉及到的服务器都是最为简单的、一对一的服务器,也就是只与一个客户端建立通信。然而在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求, 对服务端的程序就提出了特殊的要求。二、循环服务器和并发服务器1、循环服务器:循环服务器描述了在一个时刻只处理一个请求的服务器实现方式,通过在单线程内设置循环控制实现对多个客户端请求的逐一响应,这种转载 2016-11-15 23:06:19 · 311 阅读 · 0 评论 -
sqlite3的添加,删除,查看
Linux下数据库sqlite3的添加,删除,查看。这个程序需要先在命令下创建表。程序:#include #include #include static sqlite3 *db = NULL;static char *errmsg = NULL;char ** result = NULL;int num = 0;int disp转载 2016-10-31 23:38:59 · 1429 阅读 · 0 评论 -
守护进程
daemon是运行在后台的一种特殊进程。它独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事件。从上边定义可以看到:守护进程其实已经脱离了之前的所有环境。所以它很游离,很独立。举个不确定的例子:daemon类似FBI或者克格勃,没人能看到它,但是它却一直在后边做一些事情。 我们最长用daemon来做什么事情呢?我们可以用其来监控一个进程的运行,如果发现其被kill了:那就重新原创 2016-10-20 23:16:45 · 557 阅读 · 0 评论 -
进程与线程区别
进程与线程的区别进程: 1.进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; 2.进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。 3.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 4.每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,转载 2016-10-30 23:53:46 · 227 阅读 · 0 评论 -
线程&PV操作以及实现生产消费者问题
生产消费者问题:#include #include #include #include #include #define TEXT_SZ 1024 sem_t sem1; sem_t sem2; char text[TEXT_SZ]; void *write(void *text) //生产者数据输入函数 { whi原创 2016-10-29 23:56:23 · 789 阅读 · 0 评论 -
进程通信之共享内存
一、共享内存的概念共享内存就是允许多个不相关的进程访问的同一个物理内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种最快的方法,不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址。而如果某个进程向共享内存写入数据,所做的数据变化将立即影响到可以访问同一段共享内存的任何其他进程且这些进程能够原创 2016-10-26 23:14:10 · 286 阅读 · 0 评论 -
linuxc不带缓存的文件操作
系统调用指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组接口来获得操作系统内核提供的服务,例如用户可以用来创建进程等。系统调用关系图:从上图可以看出系统将程序的运行空间分为了内核空间和用户空间,通过API接口实现系统调用,目的是保护系统的内核。不带缓存的文件I/O操作:(1)creat函数函数的作用:创建一原创 2016-10-16 22:35:18 · 969 阅读 · 0 评论 -
消息队列
消息队列就是一个消息的链表。可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新信息,对消息队列有读权限的进程可以从消息队列中读走消息,消息队列是随内核持续的。消息队列就是一个消息的链表。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值,用户ID,组ID,消转载 2016-10-25 23:02:04 · 265 阅读 · 0 评论 -
进程之信号通信
信号通信1、信号的产生:信号是进程间通信中最为长久的方式,很多条件可以产生信号,例如:① 当用户按某些按键时,产生信号② 硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号③ 进程用kill函数将信号发送给另一个进程④ 用户可用k原创 2016-10-24 22:36:04 · 311 阅读 · 0 评论 -
文件操作—文件流
①.FILE *fopen(const char *path, const char *mode);fopen()实现打开指定文件filename,其中的mode为打开模式,C语言中支持的打开模式如下表:标志 含义r, rb 以只读方式打开w, wb 以只写方式打开。如果文件不存在,则创建该文件,否则文件被截断a, ab 以追加方式打开。如果文件不存在,则创建该文件原创 2016-10-23 21:37:26 · 372 阅读 · 0 评论 -
管道通信
一.无名管道:1.管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。 数据的读出和写入:一个进程向管道中写的内容被管道另原创 2016-10-22 23:28:03 · 455 阅读 · 0 评论 -
起自TCP三次握手
说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼。本文就是来说说这些头疼点的,浅谈一些TCP的疑难杂症。那么从哪说起呢?当然是从三次握手和四次挥手说起啦,可能大家都知道TCP是三次交互完成连接的建立,四次交互来断开一个连接,那为什么是三次握手和四次挥手呢?反过来不行吗?疑症一:TCP的三次握手、四次挥手转载 2016-11-27 22:45:12 · 386 阅读 · 0 评论