Linux C
文章平均质量分 75
zhengqijun_
You can do it! No can no BB!
展开
-
ncurses--读书笔记1
1.初始化 -》 在虚拟屏幕上打印 -》 显示并刷新缓冲区 -》 等待用户输入 -》 关闭。 inirscr() -> printw() -> refresh() -> getchar() -> endwin()2.终端驱动程序会缓冲用户输入的字符,直到遇到换行符,才能使用字符。raw()和cbreak()都可以禁止行缓冲。区别在于:raw()处理挂起、中断和退出等控制原创 2016-09-16 19:51:30 · 536 阅读 · 1 评论 -
C/S架构和B/S架构介绍
一、C/S架构1. C/S架构及其背景C/S架构是一种比较早的软件架构,主要应用于局域网内。在这之前经历了集中计算模式,随着计算机网络的进步与发展,尤其是可视化工具的应用,出现过两层C/S和三层C/S架构,不过一直很流行也比较经典的是我们所要研究的两层C/S架构。C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,第二层是通原创 2016-11-06 21:38:27 · 137778 阅读 · 4 评论 -
关于数据库的介绍和操作 -- sqlite3
数据库 -- sqlite3一、数据库的定义数据库是一个有结构、有集合、可共享的统一管理的数据集合。DataBase:简称DB。二、数据库的特点1. 实现数据共享数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。2. 减少数据的冗余度减少了数据冗余,保持了数据的一致性。3. 保持数据的独立性数据的原创 2016-11-03 14:52:48 · 1844 阅读 · 1 评论 -
Linux多线程的同步与互斥
一、共享资源的使用1. 由于同一进程下的多线程是共用地址空间,因此就要考虑共享资源的使用。如果没有一定的规则,那么共享资源的内容就会显得杂乱无章,这里引入了同步与互斥的概念!2. 进行多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂。为了解决共享资源的使用问题,通过下面这些技术的使用,可以解决线程之间对资源的竞争:a. 互斥量 Mutex原创 2016-11-01 21:55:30 · 698 阅读 · 0 评论 -
对Linux多线程的理解
Linux多线程一、线程的特点1. 线程是进程的一个执行流,是CPU调度和分配的基本单位。线程是程序运行的最小单位。2. 线程不会影响到其它线程的运行。比如一个线程崩溃,其它线程正常运行。3. 同一进程内的线程共享进程的地址空间。二、一个线程的组成1. 一个指向当前被执行指令的指令指针2. 一个栈空间3. 一个寄存器值的集合4. 一个私有的数据区三、使用线程原创 2016-10-31 20:17:00 · 513 阅读 · 0 评论 -
Linux进程间通信 -- 信号量
Linux进程间通信 -- 信号量一、信号量的定义信号量是保护临界资源,解决进程间同步与互斥问题的一种通信机制。进程可以根据信号灯来判断是否能够访问共享资源,还可以用于进程同步。二、信号灯分类1. 二值信号灯信号灯的值只能取0或1。二值信号灯能够实现互斥锁的功能,上锁之后只能由进程自己来解锁。2. 计算信号灯信号灯的值可以取任意非负值。三、操作步骤创建信号量原创 2016-10-30 22:39:22 · 365 阅读 · 0 评论 -
Linux进程间通信 -- 共享内存
Linux进程间通信 -- 共享内存:同一块物理内存被映射到两个进程的地址空间,一个进程可以看到到另一个进程对共享内存的更新。一、特点1. 共享内存是进程间通信最快的IPC形式。2. 进程可以直接对共享内存进行读写,而不需要任何数据的复制。3. 共享内存中的数据是在解除映射之后才写回文件中的。二、操作步骤1. 创建共享内存2. 映射共享内存3. 使用共享内存4.原创 2016-10-29 20:35:03 · 430 阅读 · 0 评论 -
Linux进程间通信 -- 信号
信号通信1、信号的产生:信号是进程间通信中最为长久的方式,很多条件可以产生信号,例如:① 当用户按某些按键时,产生信号② 硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号③ 进程用kill函数将信号发送给另一个进程④ 用户可用kill命令将原创 2016-10-27 10:57:56 · 271 阅读 · 0 评论 -
Linux进程间通信 -- 消息队列
一、消息队列1. 消息队列就是一个消息的链表。可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新信息,对消息队列有读权限的进程可以从消息队列中读走消息,消息队列是随内核持续的。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值,用户ID,组ID,消息队列中消息数原创 2016-10-28 21:18:08 · 625 阅读 · 0 评论 -
Linux进程间通信 -- 管道
本篇讲述Linux进程间通信 -- 管道其中管道又分为无名管道和有名管道。1> 管道的特点A. 管道是单向的,先进先出的。B. 一个进程在管道尾部写入数据,另一个进程在管道头部读取数据。因此管道通信是半双工的。C. 管道提供了简单的流控制机制,当进程试图读空管道时,进程将阻塞。当管道已经写满时,进程再试图向管道写入数据,进程将阻塞。2> 有名管道和无名管道的区别无名原创 2016-10-25 22:08:10 · 392 阅读 · 0 评论 -
基于文件流的文件操作
基于文件流的文件操作1、打开文件 -- fopen函数原型:FILE *fopen(const char *path, const char *mode);函数参数:path --打开文件的路径 mode --打开文件的方式mode权限:r:打开只读文件,文件必须存在。r+:打开读写文件,文件必须存在。w:打开只写文件,文件不存原创 2016-10-23 20:18:04 · 435 阅读 · 0 评论 -
TCP中的Nagle算法
TCP中的Nagle算法一、Nagel算法TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头。同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(在一个连接中会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据).Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。转载 2016-12-16 23:00:11 · 666 阅读 · 0 评论 -
Linux命令学习总结: file命令[转载]
Linux命令学习总结: file命令命令简介:该命令用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的。执行权限 :All User指令所在路径:/usr/bin/file命令语法:file [ -bchikLnNprsvz ] [ -f namefile ] [ -F转载 2017-05-15 21:28:46 · 458 阅读 · 0 评论 -
关于库文件的制作和区别
1. 库函数是保存在库文件里面,看不到库文件定义的函数和使用,但是可以实现功能。2. 库文件分为动态库和静态库两种。a.静态库后缀为.a ,在编译时将库文件的代码搬迁到可执行文件中。b.动态库后缀为.so ,在执行的时候,才将需要的代码搬迁到可执行文件中。[root@localhost 0706]# ls0706_ add.c add.o include li原创 2016-07-07 11:38:38 · 845 阅读 · 0 评论 -
getopt()和getopt_long()函数解析[转载]
平时在写程序时常常需要对命令行参数进行处理,当命令行参数个数较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现。在Linux中,我们可以使用getopt、getopt_long、getopt_long_only来对这个问题进行处理。[cpp] view plain copy转载 2017-05-19 14:51:49 · 332 阅读 · 0 评论 -
syslog函数解析[转载]
守护进程日志的实现syslogd守护进程用于解决守护进程的日志记录问题,而日志信息保存的位置和记录的信息级别是在syslogd守护进程的配置文件中设定的。守护进程日志主要涉及3个函数,分别是openlog、syslog和closelog函数。表8.4所示为这3个函数的具体信息。表8.4 openlog、syslog和closelog函数#include转载 2017-05-19 15:26:20 · 762 阅读 · 0 评论 -
C语言编程之数据库 -- sqlite3
数据库作为我们常用的一种存储方式,不仅管理起来比文件操作更为方便,也保证了数据的安全性。数据库的使用有以下两种方式,第一种进入数据库直接进行操作,第二种是在命令下操作。更为常用的是使用数据库的命令来操作数据库,操作起来也很方便。下面我们就来讲讲如何使用数据的命令函数1. 打开数据库 -- sqlite3_open函数原型:int sqlite3_open(const char * fi原创 2016-11-07 20:02:20 · 1638 阅读 · 0 评论 -
Linux网络通信 -- TCP/IP协议
一、网络通信网络是通过物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的,通过信息交换实现人与人、人与计算机、计算机与计算机之间的通信。1. 网络通信要遵守网络协议,局域网中最常用的有三个网络协议:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和TCP/IP协议。a> NetBEUI - 网络基本输入输出系统扩展用户接口。N原创 2016-11-08 22:19:06 · 4996 阅读 · 0 评论 -
ncurses--读书笔记2
20.使用attron()函数和attroff()函数开启和关闭输出修饰。修饰属性:A_NORMAL 普通字符输出(不加亮显示)A_STANDOUT 终端字符最亮A_UNDERLINE 下划线A_REVERSE 字符反白显示A_BLINK 闪动显示A_DIM 半亮显示A_BOLD 加亮加粗原创 2016-09-17 19:55:59 · 542 阅读 · 0 评论 -
ncurses--读书笔记3
31.getch()返回一个整数来对应键盘上的按键。如果是一个普通字符,返回的整数就等价于该字符,如果是其它字符,就返回定义的常量匹配的值。32.在使用鼠标之前要调用mousemask()函数来激活接收的鼠标事件,默认情况下,所有鼠标事件的接收状态都是未激活的。mousemask( mmask_t newmask, //想要监听的鼠标事件掩码原创 2016-09-18 12:40:27 · 392 阅读 · 0 评论 -
ncurses--读书笔记4
44.面板对象实际上是一个窗口。这个容器实际上是一个栈,栈顶的面板是完全可见的。其它面板在栈中所处的位置决定了它们是否可见。45.基本思想:创建一个栈来保存那些重叠的面板,然后使用面板库来正确显示。一个面板程序的设计流程:a.使用newwin()函数创建一个窗口,添加到面板里。b.使用newpanel()函数创建面板并将面板依据用户指定的可见顺序压进栈。c.调用upda原创 2016-09-20 20:57:47 · 327 阅读 · 0 评论 -
如何设置Vim的配置(详细)
我的vim配置主要有以下优点:1.按F5可以直接编译并执行C++、C++、java代码以及执行shell脚本,按“F8”可进行C、C++代码的调试。2.自动插入文件头 ,新建C、C++源文件时自动插入表头:包括文件名、作者、联系方式、建立时间等,读者可根据需求自行更改。3.映射“Ctrl + A”为全选并复制快捷键,方便复制代码。4.按“F2”可以直接消除代码中的空行。5.“F原创 2016-10-10 21:15:49 · 1420 阅读 · 0 评论 -
linux多个用户对于文件的操作
Linux多个用户对文件的操作时利用文件锁来操作的。文件锁是一种文件读写机制,在任何特定的时间只允许一个进程访问一个文件。利用这种机制能够使读写单个文件的过程变得更安全。以下是Linux系统中两种常用的文件锁: 1、 协同锁 协同锁要求参与操作的进程之间协同合作。假设进程“A”获得一个WRITE锁,并开始向文件中写入内容;此时,进程“B”并没有试图获取一个锁,它仍然可以打开文件原创 2016-10-21 20:29:50 · 2926 阅读 · 0 评论 -
基于文件描述符的文件操作
基于文件操作符的文件操作1、文件创建 -- creat函数原型:int creat(const char *pathname, mode_t mode);函数参数:pathname --创建的文件名 mode --创建的方式S_IRUSR:可读S_IWUSR:可写S_IXUSR:可执行S_IRWXU:可读可写可执行0755 --原创 2016-10-22 20:57:42 · 1245 阅读 · 0 评论 -
linux进程调度介绍
一、Linux新老版本调度器对比在 2.6 版本的内核之前,当很多任务都处于活动状态时,调度器有很明显的限制。这是由于调度器是使用一个复杂度为 O(n) 的算法实现的。在这种调度器中,调度任务所花费的时间是一个系统中任务个数的函数。换而言之,活动的任务越多,调度任务所花费的时间越长。在任务负载非常重时,处理器会因调度消耗掉大量的时间,用于任务本身的时间就非常少了。因此,这个算法缺乏可伸缩性转载 2016-10-16 21:25:46 · 428 阅读 · 0 评论 -
Linux中---exec族函数解析
(1)exec函数说明fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也可原创 2016-10-18 20:17:22 · 26865 阅读 · 2 评论 -
TCP协议3次握手和4次挥手
一、TCP通信过程TCP是TCP/IP体系中面对连接的传输层协议,采用多种机制来确保数据的可靠性。其中为了确保TCP成功连接和断开,TCP采用了一种三次握手和四次挥手的机制。过程如下所示三次握手成功后,成功建立连接,然后开始传输数据信息,最后断开连接。这是TCP传输的步骤!二、TCP三次握手TCP三次握手都是发生在数据传输的什么时候呢?下面来共同解析1. 源主机A的TC原创 2016-11-09 22:47:44 · 482 阅读 · 0 评论 -
Linux守护进程的简单介绍
一、守护进程的定义在linux操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。实际上,守护进程就是一个后台程序,能够提供相应的服务,保证功能的实现。二、守护进程的生命周期守护进程脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示,并且进程也不会被任何终原创 2016-10-17 22:04:37 · 749 阅读 · 0 评论 -
Linux内存空间的分配
1、Linux内存空间a. Linux的内存空间有4G的进程地址空间,包括用户空间与内核空间。用户空间分配了3G,而内核空间分配了1G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。只有用户进程进行系统调用的情况下(代表用户进程在内核态执行),才能够访问到内核空间。b.用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。而内核空间是由内核负责映射,它并不会原创 2016-07-11 11:00:23 · 6328 阅读 · 0 评论 -
Linux守护进程的实现
对于守护进程来说,刚开始我并不是十分的理解,只知道它是一个后台进程,可以脱离终端执行相应的操作。对于实现过程,刚开始并没有弄清楚,今天我将守护进程的实现过程研究了一遍,实现代码在下面贴出。守护进程的介绍参考:http://blog.csdn.net/zhengqijun_/article/details/52842519Linux守护进程的实现过程/******************原创 2016-11-20 15:06:16 · 569 阅读 · 0 评论 -
[Linux网络编程] 循环服务器的实现
一、循环服务器的定义循环服务器描述了在一个时刻只处理一个请求的服务器实现方式,通过在单线程内设置循环控制实现对多个客户端请求的逐一响应,这种服务器的设计、编程、调试和修改往往比较容易去实现。在循环执行的服务器对预期的负载能提供足够的反应速度时常使用这种类型的服务器。循环服务器有有UDP循环服务器和TCP循环服务器两种类型。二、UDP循环服务器UDP循环服务器的实现方法:UDP服务器每次原创 2016-11-17 19:39:39 · 1660 阅读 · 0 评论 -
[Linux网络编程] 并发服务器的实现
一、并发服务器并发服务器模型的实现主要有三种方式:1. 多进程2. 多线程3. 调用fcntl将sockfd设置为非阻塞模式二、多进程方式(参考代码C语言)/*****************************************************File name:并发服务器Author:Zhengqijun Version:1.2 Dat原创 2016-11-15 20:41:27 · 489 阅读 · 1 评论 -
TCP / UDP套接字编程
一、TCP的网络编程操作1、TCP服务器编程步骤①.创建一个socket,用函数socket()②.绑定IP地址、端口等信息到socket上,用函数bind()③设置允许的最大连接数,用函数listen()④接收客户端上来的连接,用函数accept()⑤收发数据,用函数send()和recv(),或者read()和write()⑥关闭网络连接2、TCP客户端编程步骤原创 2016-11-12 21:47:31 · 1559 阅读 · 0 评论 -
Python实现设置终端显示颜色、粗体、下划线等效果 [转载]
也许你希望在终端上输出一些带有颜色或者粗体、下划线等样式的信息,就像man中的那样,那么这篇文章将会起到些许作用。事件起因在Python开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中。但是很杂乱的信息显示在一起,往往没有重点,一个一个找我们需要的信息往往特别复杂.Linux下的终端设置linux终端颜色设置格式L...转载 2018-08-02 14:43:34 · 3146 阅读 · 0 评论