
Linux C
文章平均质量分 82
L_YY
这个作者很懒,什么都没留下…
展开
-
进程间的通信方式:管道
一、需要进程通信的原因在大型的应用系统中,其进程的数量往往是非常多的,需要这些进程之间相互协作才能完成工作,而这也就需要进程之间有效地进行通信协作完成任务。二、Linux 进程间通信的目的:1.数据传输: 一个进程需要将它的数据发送给另一个进程2.资源共享: 多个进程之间共享同样的资源3.通知事件: 一个进程需要向另一个或一组进程发送消息,通知它们原创 2016-10-22 23:08:20 · 352 阅读 · 0 评论 -
Linux线程编程
一、线程的概念提及线程前,首先引入进程。进程是一个具有独立功能的程序的一次运行活动,是资源分配的最小单位。Linux系统是一个多进程的系统,进程间具有并行性、互不干扰的特点,即使一个进程发送异常,它也不会影响到系统中的其他进程。线程是进程的一个执行流,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。一个进程由多个线程组成,线程与同属一个进程的其他线程共享进程所拥有的全部资原创 2016-11-01 21:39:06 · 201 阅读 · 0 评论 -
Linux网络编程:网络服务器的分类及运用
一、在之前设计的网络编程服务器中,涉及到的服务器都是最为简单的、一对一的服务器,也就是只与一个客户端建立通信。然而在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求, 对服务端的程序就提出了特殊的要求。二、循环服务器和并发服务器1、循环服务器:循环服务器描述了在一个时刻只处理一个请求的服务器实现方式,通过在单线程内设置循环控制实现对多个客户端请求的逐一响应,这种原创 2016-11-15 20:38:39 · 423 阅读 · 0 评论 -
进程和线程间的联系和区别
进程概念 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了原创 2016-11-20 17:19:33 · 288 阅读 · 0 评论 -
TCP/UDP的套接字网络编程模型
一、TCP的网络编程操作1、TCP服务器编程步骤:①. 创建一个socket,用函数socket()②. 绑定IP地址、端口等信息到socket上,用函数bind()③.设置允许的最大连接数,用函数listen()④.接收客户端上来的连接,用函数accept()⑤.收发数据,用函数send()和recv(),或者read()和write()⑥.关闭网络连接2、TCP原创 2016-11-08 21:20:14 · 1026 阅读 · 0 评论 -
线程实现并发服务器
#include #include #include #include #include #include #include #define PORT 3333#define MAX_SIZE 1024void * read_msg(void *arg){ int n_read; int new_fd = *((int *)arg);原创 2016-12-04 19:53:00 · 254 阅读 · 0 评论 -
【Linux C编程】sizeof面试题选
结构体和共用体的内存分配是C语言的一个难点,也是面试题中的热点。示例1: Union data1 { double d; int i; char c1; char c2[9]; };sizeof(union data1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么整转载 2016-11-22 20:34:16 · 334 阅读 · 0 评论 -
select函数:I/O多路复用
I/O 多路复用阻塞函数在完成其指定的任务以前不允许程序继续向下执行。如:当服务器运行到accept语句时而没有客户端请求连接,服务器就会停止在accept语句上等待连接请求的到来,这种情况称为堵塞,而非堵塞操作则可以立即完成。如:如果你希望服务器仅仅检查是否有客户在等待连接,有就接受连接,否则就继续做其他的事情,则可以通过使用select系统调用来实现,除此之外,select还可以同时监听多原创 2016-12-08 21:34:36 · 312 阅读 · 0 评论 -
多线程的聊天室实现-服务器端
服务器端的主要功能: 实现多用户群体聊天功能(此程序最多设定为10人,可进行更改),每个人所发送的消息其他用户均可以收到。用户可以随意的加入或退出(推出以字符串“bye”实现),服务器也可以进行关闭。 服务器端的程序结构: 总共有三个函数:主函数(main),实现服务器端的初始化,接受连接;消息处理函数(rcv_snd),接受某一用户的消息,将其进行简单处理之后发送给其他所有的用户;退转载 2016-11-27 21:05:10 · 916 阅读 · 0 评论 -
TCP的三次握手四次挥手
TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明原创 2016-12-09 21:12:21 · 359 阅读 · 0 评论 -
sqlite数据库及常用命令
嵌入式数据库一.数据库综述数据库(DataBase,简记为DB)就是一个有结构的、集成的、可共享的统一管理的数据集合。它不仅包括数据本身,而且包括相关数据之间的联系。数据库技术主要研究如何存储、使用和管理数据;* 有结构的,指的是数据是按一定的模型组织起来的。* 集成的指的是数据库中集中存放着企业各种各样的数据,集中存放的好处是:一个数据只需一个备份,重复存储少,即消除了数据的冗原创 2016-11-03 21:56:07 · 1092 阅读 · 0 评论 -
数据库:SQlite3的C接口相关函数
一、内容介绍我们在之前的文章中介绍到了SQlite数据库的相关内容及在命令下对数据库的相关操作,但我们通常是在项目中对数据库进行使用,这也就限制了我们不能运用命令行进行操作,但SQlite3给我们提供了相关的C接口,这是我们同样可以运用函数的形式运用嵌入式数据库。二、相关的SQlite3函数1、sqliite3_open函数的原型:int sqlite3_open(const ch原创 2016-11-05 20:19:11 · 1163 阅读 · 0 评论 -
Linux进程间的通信方式:信号量的使用
一、信号量的概念信号量(又名信号灯):与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制,主要用途是保护临界资源,相当于内存中的标志,进程可以根据它判断是否能够访问某些共享资源,同时,进程也可以修改标志,除了用于访问控制外,还可用于进程同步,信号量还可以保护进程间的同步互斥。关于同步和互斥概念如下:同步:进程间按一定的顺序去执行互斥:某一进程占用资源时,只有其释放资源原创 2016-10-28 22:05:08 · 796 阅读 · 0 评论 -
exec函数族
一、exec函数说明fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也原创 2016-10-20 23:12:49 · 315 阅读 · 0 评论 -
make管理器——makefile
Make管理器make (make通过makefile来实现操作)1.原因: 当我们写许许多多.c文件的时候,编译起来会非常麻烦。虽然可以gcc *.c,编译所有的.c文件,但是不同目录下的.c文件还是不可以一起编译。所以要用make统一编译。2.特点: 能够自动编译 (1.按照Makefile的内容命令进行编译 2.自动判断时间戳,没有修改源文件就不会再重新编译)3. M转载 2016-10-14 21:35:06 · 317 阅读 · 0 评论 -
多线程的同步和互斥
一、共享资源的使用1. 由于同一进程下的多线程是共用地址空间,因此就要考虑共享资源的使用。如果没有一定的规则,那么共享资源的内容就会显得杂乱无章,这里引入了同步与互斥的概念!2. 进行多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂。为了解决共享资源的使用问题,通过下面这些技术的使用,可以解决线程之间对资源的竞争:a. 互斥量 Mu原创 2016-11-04 23:25:48 · 306 阅读 · 0 评论 -
Linux进程间的通信方式:共享内存的使用
一、共享内存的概念共享内存就是允许多个不相关的进程访问的同一个物理内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种最快的方法,不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址。而如果某个进程向共享内存写入数据,所做的数据变化将立即影响到可以访问同一段共享内存的任何其他进程且这些进程能够看到原创 2016-10-25 21:57:25 · 1009 阅读 · 0 评论 -
Linux C的文件操作及相关函数
一、Linux文件的属性及文件的分类二、文件描述符的概念及作用三、系统调用的概念三、不带缓存的文件I/O操作的相关函数一、Linux文件的属性文件的属性:我们在Gcc编译器输入“ ls -al"指令时,除了有不同的类型外还有一些字母串如”drwx-wx-wx",除第一个字符外(表示文件类型:例如普通文件),这里还剩三组,每组3个字符构成的字原创 2016-10-16 21:14:39 · 3483 阅读 · 0 评论 -
守护进程及初始化守护进程
Linux系统中的守护进程是一种运行在后台的进程。而守护进程,也就是通常说的Daemon进程。它通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。守护进程必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符,控制终端,会话和进原创 2016-10-26 21:20:55 · 2950 阅读 · 0 评论 -
不带缓存的文件复制程序
#include #include #include #include #include #include #define MAX_SIZE 1024int main(int argc,char *argv[]){ int read_num; int write_num; int read_fd; int write_fd; char原创 2016-10-17 21:30:59 · 389 阅读 · 0 评论 -
Linux进程间的通信方式:运用消息队列通信
一、消息队列的概念:背景:Unix早期通信的机制之一信号,它能够传送的信息量有限,而无名管道和有名管道则是典型地随进程持续IPC,只能传送无格式的字节流,这无疑给应用程序开发带来不便。消息队列:消息队列是一个消息的链表,可以把消息看作一个记录,且具有特定的格式及特定的优先级。对消息队列有读权限的进程可以从消息队列中读走消息,而对消息队列有写权限的则可以向消息队列中写入消息数据。 二原创 2016-10-27 21:06:28 · 645 阅读 · 0 评论 -
Linux C文件锁函数
表头文件 #include 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。 参数 operation有下列四种情况: LOCK_SH 建立共享锁定。多个进程可同时对原创 2016-10-18 20:37:21 · 467 阅读 · 0 评论 -
Linux C:利用两个线程实现生产者消费者模型
在使用线程实现消费者生产者模型前,简单介绍一下线程的概念。线程是进程的一个实体,对于进程而言,进程是程序资源分配的最小单元,这在之前提及过;而对于线程,它是程序执行的最小单元,即CPU调度和分派的基本单位,它附属于进程,同样也能独立运行。关于资源分配上,线程基本不拥有系统资源,只拥有运行中必不可少的一些资源如程序计数器,栈等。对于线程同样有互斥和同步问题,互斥是多个线程之间某个进程操作同个原创 2016-10-29 20:33:42 · 5005 阅读 · 0 评论 -
Linux C:多进程文件操作之文件锁
flock函数可以锁定文件,避免多个进程对同个文件进行操作时出现数据出错。flock的用法是在打开文件后对文件读写前调用flock函数上锁,文件操作完后flock解锁,但需注意另一个进程操作同个文件时必须自己去检查文件是否已上锁,即在读写文件前调用flock函数即可进行判断,如果上锁,该进程则会阻塞,直到该文件被所占用的进程解锁。具体程序如下:#include #include #in原创 2016-10-19 21:07:46 · 4619 阅读 · 1 评论 -
sqlite3 编写简易通讯录
以下贴出的是我用sqlite3写的简易通讯录,若有什么错误望大牛指正#include #include #include #include #define MAX_SIZE 1024static sqlite3 *db = NULL;static char *errmsg = NULL;int count = 0;int dis();void welcome(){原创 2016-11-11 19:56:43 · 828 阅读 · 0 评论 -
数据库与文件的数据存储的区别
文件系统:把数据组织成相互独立的数据文件,实现了记录内的结构性,但整体无结构;而数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。在文件系统中,数据冗余度大,浪费存储空间,容易造成数据的不一致;数据库系统中,数据是面向整个系统,数据可以被多个用户、多个应用共享使用,减少了数据冗余。文件系统中的文件是为某一特定应用服务的,当要修改数据的逻辑结构时,必须修改原创 2017-01-01 12:48:43 · 2837 阅读 · 0 评论