
Linux C 编程
文章平均质量分 77
丫就是熊个猫猫
to be a better me !进一寸有一寸的欢喜~
展开
-
[Linux C编程]守护进程
守护进程守护进程是Linux中的后台服务进程,一般都是在后台运行的,它的生存期比较长。一般都是系统自举时启动,系统关闭时终止。在Linux中,有一个系统与用户交互的界面,成为终端,很多进程的启动和停止都与终端有很大的关系,一般我们在Linux下编写的代码都是在终端下执行或者停止的,但是守护进程突破了这种限制,它从被执行的时候开始运转,直到系统关闭时才结束,用这种方法,可以为我们的系统提供多种服务,所以是十分重要的。要编写一个守护进程一定要掌握守护进程的编程规则,以免出现一些不需要的交互作用,这里交互作原创 2016-10-21 20:23:29 · 744 阅读 · 0 评论 -
[Linux C编程]Linux文件锁
Linux C 文件锁Linux系统中,文件上锁的函数有两个flock和fcntl ,前者主要是加建议性锁,后者既可以加建议性锁(默认)也可以加强制性锁,而且它还可以给某一记录进行上锁,即所谓的记录锁。fcntl文件锁有两种类型:建议性锁 和强制性锁 建议性锁是这样规定的:每个使用上锁文件的进程都要检查是否有锁存在,当然还得尊重已有的锁。内核和系统总体上都坚持不使用建议性锁,它们依靠程序员遵守这个规定。原创 2016-10-20 16:01:58 · 1175 阅读 · 0 评论 -
[Linux C编程]线程之间的同步与互斥
线程之间的同步与互斥我们主要通过生产者与消费者之间的问题来体现线程之间的同步与互斥:具体问题如下:用线程实现:生产者与消费者:一个缓冲区,两个线程:生产者和消费者,一个放入缓存一个从缓存取数据,生产者在满时等待,消费者在空时等待,互斥执行。原创 2016-10-30 22:00:13 · 885 阅读 · 0 评论 -
[Linux C编程]pid_t的类型定义
pid_t的类型定义 创建进程时经常会用到进程号的类型定义:pid_t。我们都知道这个类型定义实际上就是int型。但是在linux下的c中的头文件中这个定义到底是怎么定义的呢?今天就把以前找这个定义的过程贴出来:1.首先在/usr/include/sys/types.h中有如下定义转载 2016-11-11 20:11:12 · 3622 阅读 · 1 评论 -
[Linux C编程]嵌入式数据库(一)
嵌入式数据库 一、数据库综述数据库(DataBase,简记为DB)就是一个有结构的、集成的、可共享的统一管理的数据集合。它不仅包括数据本身,而且包括相关数据之间的联系。数据库技术主要研究如何存储、使用和管理数据; 所谓有结构的,指的是数据是按一定的模型组织起来的。·数据模型可用数据结构来描述。·数据模型决定数据的组织方式、操作方法。·理解数据库的前提是理解数据模型。·现在的数据库多数是以关系模型来组织数据的。·可以简单地把关系模型的数据结构-关系理解成为一张二维表。原创 2016-10-31 22:36:20 · 2060 阅读 · 0 评论 -
[Linux C编程]linux下cat详解
cat主要有三大功能:1.一次显示整个文件。$ cat filename2.从键盘创建一个文件。$ cat > filename 只能创建新文件,不能编辑已有文件.3.将几个文件合并为一个文件: $cat file1 file2 > file参数:转载 2016-11-12 20:40:02 · 1614 阅读 · 0 评论 -
[Linux C编程]嵌入式数据库(二)
嵌入式数据库 11.1 嵌入式数据库概述1. 嵌入式数据库介绍 随着电子技术的飞速发展,嵌入式系统中的存储器容量和性能也在迅速提高,这为扩大嵌入式的应用领域提供了必要的物理基础。展望未来,嵌入式系统正在向网络化、智能化等高端应用方向发展。在这个发展过程中,嵌入式系统内的数据量会急剧膨胀。因此,嵌入式数据库的作用将会变得越来越重要。 由于嵌入式平台和应用领域的多样化,所以嵌入式数据库的体系结构与运行模式和企业级数据库有很大的区别。嵌入式数据库的主要特性如下:原创 2016-11-01 23:32:51 · 1159 阅读 · 0 评论 -
[Linux C编程]例说makefile增加宏定义
0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。 例说makefile分为以下几个部分,更多内容请参考【例说makefile索引博文】 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.增加宏定义 5.增转载 2016-11-14 22:37:45 · 1296 阅读 · 0 评论 -
STDIN_FILENO与stdin的区别
1.STDIN_FILENO的作用STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。转载 2016-11-18 22:01:13 · 475 阅读 · 0 评论 -
[Linux C编程]socket编程中TCP/IP协议
在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。转载 2016-11-19 23:15:08 · 819 阅读 · 0 评论 -
Linux中对文件删除函数unlink的操作
原文转自:http://blog.chinaunix.net/uid-26983585-id-3245451.html看了unlink()函数是对文件的删除,于是写了一个函数进行测试之,结果发现在调用了unlink以后仍然可以对文件进行读写操作,又看了一下书才明白是我没有明白unlink函数的真正含义:删除目录相并减少一个连接数,如果链接数为0并且没有任何进程打开该文件,该文件内容才能被真正删除,但是若又进程打开了该文件,则文件暂时不删除直到所有打开该文件的进程都结束时文件才能被删除。测试代码:转载 2016-12-28 20:50:52 · 978 阅读 · 0 评论 -
[Linux C]CGI编程
在HTML中,当客户填写了表单,并按下了发送(submit)按钮后,表单的内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的内容进行一些处理,或者是把它们保存起来,或者是按内容进行一些查询,或者是一些别的什么。没有了CGI,WEB的世界就完全失去了它的交互性,所有的信息都变成单向的了,而不能够有任何的反馈。转载 2016-12-31 19:22:47 · 702 阅读 · 0 评论 -
[Linux C]RedHat环境下密码显示问题
在做聊天室项目中,注册以及登录时,我们想要功能更实现保密效果,避免不了的就是密码显示问题,在上网搜索了攻略之后,发现很少有在RedHat环境的密码显示程序,因为在RedHat中,没有conio这个库,我们使用的是curses.,下面贴出例程,大家可以参考一下:第一个程序为百度得到的例程:#include<stdio.h> #include<curses.h> int main() { char p[20]; printf("Please Input password:原创 2017-01-17 17:23:40 · 527 阅读 · 0 评论 -
[Linux C编程]文件操作
1.什么是系统调用? 所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。2.为什么用户程序不能直接访问系统内核提供的服务呢? 由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。 因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。3.什么是文件?li原创 2017-08-08 14:38:38 · 743 阅读 · 0 评论 -
[Linux C编程]进程控制
1.什么是进程?进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元2.进程与程序的区别?·程序是放到磁盘的可执行文件进程是指程序执行的实例·进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁 移;而程序通常对应着文件、静态和可以复制。·进程是暂时的,程序是长久的:进程是一个状态变化的过程,程序可长久保存。·进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)·进程与程序的对应关系:通过多次执行,一个程原创 2017-08-08 14:47:05 · 603 阅读 · 0 评论 -
[Linux C编程]进程间通信
1.管道有什么特点?管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞2.无名管道与有名管道的区别?无名管道:用于父进程和子进程间的通信有名管道:用于运行同一系统中的任意两个进程间的通信。原创 2017-08-08 14:52:06 · 874 阅读 · 0 评论 -
[Linux C编程]多线程
1.进程与线程的区别:1)进程是程序的一次执行,是资源分配的最小单位,线程可以理解为进程中执行的一段程序片段,是CPU调度的最小单位;2)进程间是独立的,一个程序崩溃后,在保护模式下不会对其他进程产生影响。同一进程所产生的线程共享同一内存空间,一个线程挂掉会导致整个进程挂掉;3)同一进程中两段代码不能同时执行,除非引入线程;、线程所占用的资源要少于进程所占用资源;4)进程间可以通过IPC通信,但线程不可以。原创 2017-08-08 14:55:13 · 540 阅读 · 0 评论 -
[Linux C编程]数据库
1.有哪些常用的数据库,请分别介绍一下。目前有许多数据库产品,如Oracle、SQL Server、DB2、MySQL 、Access,SQLite3等产品各以自己特有的功能,在数据库市场上占有一席之地。(1)Oracle是1983年推出的世界上第一个开放式商品化关系型数据库管理系统。它采用标准的SQL结构化查询语言,支持多种数据类型,提供面向对象存储的数据支持,具有第四代语言开发工具,支持Unix、Windows NT、OS/2、Novell等多种平台。除此之外,它还具有很好的并行处理功能。Oracl原创 2017-08-08 14:59:11 · 1012 阅读 · 0 评论 -
[Linux C编程]堆和栈的概念
堆和栈的概念一、预备知识——程序的内存分配1、一个由C/C++编译的程序占用的内存分为以下几个部分(一)栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。(二)堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。原创 2016-10-19 23:01:45 · 508 阅读 · 0 评论 -
[Linux C编程]wait 与 waitpid的区别
函数说明 wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。 waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若干选项,如可提供一个非阻塞版本的 wait()功能,也能支持作业控制。实际上,wait()函数只是 waitpid()函数的一个特例,在Linux 内部实现 wai转载 2016-11-10 20:58:40 · 905 阅读 · 0 评论 -
[Linux C编程]I/O多路复用
多路复用函数说明 我们都知道fcntl()函数解决了文件共享的问题,如果不知道请看:http://blog.youkuaiyun.com/mybelief321/article/details/8993138。接下来该处理I/O复用的情况了。那么,什么是I/O复用呢?这个咱得先弄清楚,所谓的I/O复用无非就是多个进程共同使用一个I/O输入输出流。 在经典的《Unix网络编程第1卷》Chapter 6中作者详细介绍了五种I/O模型,分别为: ① blocking I/O ② nonblocki转载 2016-11-02 23:03:05 · 876 阅读 · 0 评论 -
[Linux C 编程]进程间通信(一)
进程间通信目的数据传输——一个进程需要将它的数据发送给另一个进程资源共享——多个进程之间共享同样的资源通知事件——一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件进程控制——有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变原创 2016-10-22 23:04:57 · 688 阅读 · 0 评论 -
[Linux C编程]数据库系统与文件的系统的区别
其实他们之间的关系很简单,如下参考: 文件系统把数据组织成相互独立的数据文件,实现了记录内的结构性,但整体无结构;而数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。在文件系统中,数据冗余度大,浪费存储空间,容易造成数据的不一致;数据库系统中,数据是面向整个系统,数据可以被多个用户、多个应用共享使用,减少了数据冗余。文件系统中的文件是为某一特定应用服务的,当要修改数据的逻辑结构时,必须修改应用程序,修改文件结构的定义,数据和程序之间缺乏独立性;数据库系统中,转载 2016-11-03 22:49:26 · 486 阅读 · 0 评论 -
[Linux C编程]进程间的通信(二)
共享内存实现分为两个步骤: 1、创建共享、打开共享内存,使用shmget函数 2、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数 3. 分离共享内存 4. 控制、删除共享内存创建shmget:函数的作用:在内核中创建共享内存函数的原型:int shmget(key_t key,int size,int shmflag);函数的参数:key:键值,IPC_PRIVATE:私有的键值 size:创建的内存大小 shmf原创 2016-10-23 23:28:29 · 1007 阅读 · 0 评论 -
[Linux C编程]网络协议
网络协议TCP/IP分层模型OSI协议参考模型,它是基于国际标准化组织(ISO)的建议发展起来的,它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。这个7层的协议模型虽然规定得非常细致和完善,但在实际中却得不到广泛的应用,其重要的原因之一就在于它过于复杂。但它仍是此后很多协议模型的基础。与此相区别的TCP/IP协议模型将OSI的7层协议模型简化为4层,从而更有利于实现和使用。原创 2016-11-05 23:33:41 · 898 阅读 · 0 评论 -
[Linux C编程]消息队列实现同时通信
消息队列实现同时通信 unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。 消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式.进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息 首先,我们可以利用消息队列实现通信,注意,此时只能一个写一个发,下面是例程,大家可以尝试一下:原创 2016-10-25 22:29:12 · 1716 阅读 · 0 评论 -
[Linux C编程]内存数据库
内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大特点是其”主拷贝”或”工作版本”常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。转载 2016-11-06 20:31:22 · 1115 阅读 · 0 评论 -
[Linux C编程]有名管道实现守护进程
创建守护进程的步骤为:(1)在后台运行。使用fork()函数创建子进程,使其父进程结束,子进程运行。(2)脱离控制终端,登录会话和进程组。使用setsid()函数(man setsid查看更详细的细节),将子进程建立新的会话组,并担任会话组长。(3)禁止进程重新打开控制终端。由于会话组长拥有打开控制终端的权限,所以再次使用fork()函数,结束第一子进程(现在的父进程),继续第二子进程(不是会话组长)。 (4)关闭打开的文件描述符。进程从创建它的父进程那里继承了打开的文件描述符。如不关闭,将会浪费原创 2016-10-24 23:26:32 · 872 阅读 · 0 评论 -
[Linux C编程]多路复用
多路复用一般用于I/O操作可能会被阻塞的情况,对可能会有阻塞的I/O的管道、网路进行编程。采用管道函数创建有名管道,使用select函数替代使用poll函数实现多路复用: 创建两个有名管道,获取3个文件描述符(2个管道1个标准输入),然后初始化读文件描述符,select监视文件描述符的文件读写,管道1输出到屏幕上,管道2输出到屏幕上,标准输入‘Q’来进行判读是否退出。原创 2016-10-26 17:05:29 · 1019 阅读 · 0 评论 -
[Linux C编程]文件操作
文件操作1. Linux系统调用及用户编程接口(API) 所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务为什么用户程序不能直接访问系统内核提供的服务呢?原创 2016-10-16 22:54:49 · 1064 阅读 · 0 评论 -
[Linux C编程]校验方法
校验方法奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 校验方法原创 2016-11-07 18:34:11 · 865 阅读 · 0 评论 -
[Linux C编程]进程控制编程
一、进程的定义进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元;二、进程与程序程序——放到磁盘的可执行文件进程——指程序执行的实例原创 2016-10-17 22:26:57 · 1077 阅读 · 0 评论 -
[Linux C编程]TCP网络通信
TCP/IP协议族TCP/IP 实际上一个协同工作的通信家族,为网络数据通信提供通路。为讨论方便可TCP/IP 协议组大体上分为三部分:1、Internet 协议(IP)2、传输控制协议(TCP)和用户数据报协议(UDP)3、处于 TCP 和 UDP 之上的一组应用协议。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等网络层原创 2016-11-08 20:45:27 · 2593 阅读 · 0 评论 -
[Linux C编程]exec函数簇
exec函数簇在Linux中进程要使用exec函数族来启动另一个程序的执行。系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文件名(filename)、参数列表(argv)以及环境变量(envp)。exec函数族当然不止一个,但它们大致相同,在 Linux中,它们分别是:execl,execlp,execle,execv,execve和execvp。原创 2016-10-18 20:41:09 · 848 阅读 · 0 评论 -
[Linux C编程]信号发送捕捉kill() raise() alarm() pause()
信号概述 ● 信号是在软件层次上对中断机制的一种模拟。在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。 ● 信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上进程也不知道信号到底什么时候到达。 ● 信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一个进程,而无需知道该进程的状态。如果该信号当前并未处于执行态(Running),则该信号由内核保存起来,直到该进程恢复执行再转载 2016-10-28 22:19:23 · 2939 阅读 · 0 评论 -
[Linux C编程]UDP网络通信
网络基础—套接字·是一种特殊的IO接口,是一种文件描述符;·是一种常用的进程之间的通信,本地,不同主机之间通信;·Socket可用网络地址结构·{协议,本地地址,本地端口}表示。数据报套接字SOCK_DGRAM不可靠,无连接的服务。UDP原创 2016-11-09 22:05:31 · 1714 阅读 · 1 评论 -
[Linux C编程]多线程编程
多线程编程进程与线程进程:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元;进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。原创 2016-10-30 00:03:54 · 696 阅读 · 0 评论 -
[Linux C编程]网络通信
简述TCP/IP各层的作用(1)网络接口层(Network Interface Layer):网络接口层是TCP/IP协议软件的最底层,负责将二进制流转换为数据帧,并进行数据帧的发送和接收。数据帧是网络传输的基本单元(2)网络层(Internet Layer)网络层负责在主机之间的通信中选择数据报的传输路径,即路由。当网络层接收到传输层的请求后,传输某个具有目的地址信息的分组。该层把分组封装在IP数据报中,填入数据报的首部,使用路由算法来确定是直接交付数据报,还是把它传递给路由器,然后把数据报交给适当的原创 2017-08-08 15:08:18 · 4660 阅读 · 2 评论