Linux
文章平均质量分 62
jxm_96
学Linux,刚开始起步,C语言走起(*^__^*) 嘻嘻……
展开
-
Make管理器
Make管理器make (make通过makefile来实现操作)兴起原因: 当我们写许许多多.c文件的时候,编译起来会非常麻烦,虽然可以gcc *.c,编译所有的.c文件,但是不同目录下的.c文件还是不可以一起编译。所以要用make统一编译。特点: 能够自动编译 (1.按照Makefile的内容命令进行编译 2.自动判断时间戳,没有修改源文件就不会再重新编译)Makefile定义: 是转载 2016-10-09 15:01:16 · 319 阅读 · 0 评论 -
线程函数
函数pthread_create 作用:创建线程 函数原型:int pthread_create(pthread_t * tidp,const pthread_attr_t*attr,void*(*start_rtn)(void),void*arg)参数:tidp:线程id attr: 线程属性(通常为空) start_rtn:线程要执行的函数原创 2016-10-31 19:08:01 · 441 阅读 · 0 评论 -
线程之间的互斥
mutex互斥锁线程控制 互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。 互斥锁只有两种状态,也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。 在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁一个已经被上锁的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。互斥锁的基本操作: 互斥锁初始化:pthread_mu原创 2016-11-01 20:17:47 · 327 阅读 · 0 评论 -
字节,半字,字对齐方式详解
一、字节对齐基本概念 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取原创 2016-11-14 11:49:04 · 680 阅读 · 0 评论 -
linux下解决文件乱码问题及查看文件编码方法
Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助。如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。查看文件编码 在Linux中查看文件编码可以通过以下几原创 2016-11-14 11:50:20 · 2539 阅读 · 0 评论 -
网络通信UDP
UDP 前面已经讲过tcp网络通信,然后tcp每次通信都要进行三次握手连接,虽然传输的可靠性比较高,但对于一些及时性的数据的传输显得太过费时,所以就有了UDP这种无连接通信,但数据容易出错。 那些函数我这里就不讲了,直接看我上一个博客就行,我这里直接附例子了。udpserver.c#include <stdlib.h> #include <stdio.h> #include <e原创 2016-11-14 11:53:53 · 254 阅读 · 0 评论 -
sqlite3命令
1 、sqlite3常用命令当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识:sqlite3 test.db查看数据库文件信息命令(注意命令前带字符’.’): sqlite>.database查看所有表的创建语句: sqlite>.schema查看指定表的创建语句: sqlite>.schema table_name以sql语句的形式列出表内容原创 2016-11-02 18:59:56 · 301 阅读 · 0 评论 -
网关
网关 网关工作原理图概述网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包原创 2016-12-11 13:26:15 · 824 阅读 · 0 评论 -
PID算法基本知识讲解
首先帮大家解决一下什么是PID调节,为什么就要这样的疑惑。 PID是比例,积分,微分的英文单词的首字母的简称。下面举个例子说明一下PID,让大家有个感官的认识,。 一个人闭眼走路,假设他知道自己离目的地有100米远,那么他就可以以每秒一米一步这样的速度走向目的地,100米刚刚好是100步,这是一个非常理想化的现象。假设他不知道目的地有多远,目的地可能是1000米也有可能是10000米,他用每秒每原创 2016-11-20 12:07:46 · 2464 阅读 · 1 评论 -
测试题(2)
1、内存的分配方式的分配方式有几种?(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。动态内存的原创 2016-12-03 18:37:49 · 296 阅读 · 0 评论 -
DNS的作用
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明原创 2016-12-12 15:54:00 · 1012 阅读 · 0 评论 -
五种IO 模式——阻塞(默认IO模式),非阻塞(常用语管道),IO多路复用(IO多路复用的应用场景),信号IO,异步IO
五种I/O 模式: 【1】阻塞 I/O(Linux下的I/O操作默认是阻塞I/O,即open和socket创建的I/O都是阻塞I/O) 【2】非阻塞 I/O(可以通过fcntl或者open时使用O_NONBLOCK参数,将fd设置为非阻塞的I/O) 【3】I/O 多路复用(I/O多路复用,通常需要非阻塞I/O配合使用) 【4】信号驱动 I/O(SIGIO) 【5】异步 I/O一般来说,程序原创 2016-11-22 21:08:57 · 592 阅读 · 0 评论 -
五类IP地址范围及作用
转载出处:http://blog.csdn.NET/alfredtofu/article/details/6995186IP地址分为A,B,C,D,E五类。网络号:用于识别主机所在的网络; 主机号:用于识别该网络中的主机。其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用。这三种是主要的。IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,转载 2016-12-06 15:29:26 · 13319 阅读 · 0 评论 -
三次握手和四次挥手详解
一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志原创 2016-12-07 16:23:30 · 297 阅读 · 0 评论 -
TCP和UDP的区别,如何选择使用
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。UDP(User Datagram Protocol) UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。 即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥原创 2016-12-08 14:48:50 · 839 阅读 · 0 评论 -
如何实现UDP的可靠传输
如何让UDP实现可靠传输自定义通讯协议,在应用层定义一些可靠的协议,比如检测包的顺序,重复包等问题,如果没有收到对方的ACK,重新发包UDP没有Delievery Garuantee,也没有顺序保证,所以如果你要求你的数据发送与接受既要高效,又要保证有序,收包确认等,你就需要在UDP协议上构建自己的协议。比如RTCP,RTP协议就是在UPD协议之上专门为H.323协议簇上的IP电话设计的一种介于传输转载 2016-12-09 21:13:23 · 4940 阅读 · 0 评论 -
文件锁
文件锁是一种文件读写机制,在任何特定的时间只允许一个进程访问一个文件。利用这种机制能够使读写单个文件的过程变得更安全。以下是Linux系统中两种常用的文件锁: 1、 协同锁 协同锁要求参与操作的进程之间协同合作。假设进程“A”获得一个WRITE锁,并开始向文件中写入内容;此时,进程“B”并没有试图获取一个锁,它仍然可以打开文件并向文件中写入内容。在此过程中,进程“B”就是一个非合作进程。如原创 2016-10-20 22:15:00 · 538 阅读 · 0 评论 -
消费者与生产者的线程之间同步操作
实验目的通过编写经典的“生产者-消费者”问题的实验,进一步熟悉Linux中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题。实验内容“生产者–消费者”问题描述如下:有一个有限缓冲区(这里用有名管道实现FIFO式缓冲区)和两个线程:生产者和消费者,它们不停地把产品放入缓冲区和从缓冲区拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也必须等待。另外,因为缓冲区是临界资源转载 2016-10-30 20:12:57 · 944 阅读 · 0 评论 -
守护进程
本文主要包括三个部分: 一是如何实现一个守护进程,二是如何检测一个进程是否活着,三是保证某一执行文件只有一个实例在运行。1.守护进程守护进程的最大特点就是脱离了中断,Linux提供了一个系统调用daemon(),要想自定义实现的话,主要包括以下六个步骤: 1.第一步是使用umask函数,把所有的文件屏蔽字置0。文件屏蔽字是可以继承的,当你有相关操作时,如果你要创建一个文件,继承过来的屏蔽转载 2016-10-21 12:03:52 · 268 阅读 · 0 评论 -
LINUX 文件操作
Linux文件操作 1. 什么是文件?linux如何看待文件? Linux一点哲学,“一切皆为文件”;在Linux中对目录和设备的操作都等同于对文件的操作,都是使用文件描述符来进行的。 Linux文件可分为:普通文件,目录文件,链接文件,设备文件,管道文件。 2. 如何来操作文件? C库函数的文件操作是独立于具体的操作系统平台的,不管是在DOS、Windows、Linux还是在VxWo转载 2016-10-23 20:56:03 · 351 阅读 · 0 评论 -
文件编程函数
1.creat 函数的作用: 创建一个文件; 函数的原型: int creat(const char *pathname, mode_t mode); 文件头: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>返回值:成功:新的文件描述符; 出错: -1 创建几个函数:file原创 2016-10-23 21:14:34 · 396 阅读 · 0 评论 -
进程通信--无名管道
管道的概念管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。管道的分类管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。读写端口一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据原创 2016-10-24 14:29:54 · 429 阅读 · 0 评论 -
进程通信--有名管道
命名管道和无名管道基本相同,但也有不同点:无名管道只能由父子进程使用;但是通过命名管道,不相关的进程也能交换数据。命名管道的使用创建管道mkfifo 打开管道open 读管道read 写管道write 关闭管道close 删除管道unlink函数mkfifo函数作用:创建有名管道 函数原型:int mkfifo(const char * pathname, mode_t mode);原创 2016-10-25 14:31:45 · 360 阅读 · 0 评论 -
三种校验方法
奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 校验方法 奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 10001原创 2016-11-05 19:54:15 · 14075 阅读 · 0 评论 -
进程的基础知识
进程的概念进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元进程与程序的关系程序是放到磁盘的可执行文件,进程是指程序执行的实例 进程是动态的,程序使静态的进程是暂时的,程序使长久的进程与程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。进程的原创 2016-10-16 19:56:56 · 404 阅读 · 0 评论 -
进程通信--信号
进程通信—信号 产生信号的条件 1、当用户按某些按键时,产生信号 2、硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号 3、进程用kill函数将信号发送给另一个进程 4、用户可用kill命令将信号发送给其他进程下面是几种常见的信号: SIGHUP: 从原创 2016-10-26 20:32:22 · 244 阅读 · 0 评论 -
exec函数族
1.execl 函数作用:执行文件 函数原型:int execl(const char * path,const char * arg,…); 头文件:#include原创 2016-10-17 13:05:16 · 227 阅读 · 0 评论 -
网络通信协议TCP
TCP的上一层是应用层,TCP向应用层提供可靠的面向对象的数据流传输服务,TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。),应用程序通过向TCP层提交数据接发送/收端的地址和端口号而实现应用层的数据通信。 通过IP的源/目的可以惟一地区分网络中两个设备的连接,通过socket的源/目的可以惟一地区分网络原创 2016-11-07 18:46:48 · 831 阅读 · 0 评论 -
进程通信--消息队列
消息队列的使用: 创建打开消息队列msgget() 读数据从队列msgrcv() 写数据到队列msgsnd() 控制消息队列msgctl()目前主要有两种类型的消息队列: POSIX消息队列以及系统V消息队列,系统V消息队列目前被大量使用消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,必须提供该消息队列的键值函数ftok 函数功能原创 2016-10-27 20:26:43 · 682 阅读 · 0 评论 -
各类变量在内存中的地址分配
在Linux中写一个程序,里面全局变量,局部变量,static,const,常数,数组,输出这些变量的地址(包括赋值的和没有赋值的,各类数据类型)#include<stdio.h>int a;int b = 1;int const c = 2;static int d;static int e = 3;char src1[20];char dest1[] = {'a','b'};int原创 2016-10-18 14:29:49 · 534 阅读 · 0 评论 -
进程通信--信号量,共享内存
信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源. 进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步信号量的使用过程 1.创建打开信号量,semget() 2.初始化信号量,semctl()的SETVAL操作。当使用二维信号量时将信号量初始化为1; 3. 进行信号量的PV操作,调用semop()函数。 4.如果不用信号量,从系统中删原创 2016-10-28 16:41:55 · 336 阅读 · 0 评论 -
堆和栈
堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点:堆,队列优先,先进先出(FIFO—first in first out)。栈,先进后出(FILO—First-In/Last-Out)。堆栈空间分配 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值原创 2016-10-19 17:05:33 · 240 阅读 · 0 评论 -
线程与进程的区别
进程与线程的区别进程: 1.进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; 2.进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。 3.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 4.每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发生原创 2016-10-29 18:45:26 · 288 阅读 · 0 评论 -
linux ---套接字
一、什么是socket socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。也因为这样,套接字明确地将客户端和服务器区分开来。二、套接字的属性套接字的特性由3个属性确定,它们分别是:域、类型和协议。1、套接字的域它指定套接字通信中使用的网络原创 2016-11-10 20:07:01 · 487 阅读 · 0 评论 -
Linux 下的段错误分析
段错误产生的原因 2.1 访问不存在的内存地址 #include #include void main() { int *ptr = NULL; *ptr = 0; }2.2 访问系统保护的内存地址 #include #include void main() { int ptr = (int )0; *ptr = 100; }2.3 访问只读的内存地址 #转载 2016-12-18 16:11:17 · 378 阅读 · 0 评论