C语言
文章平均质量分 78
zzz1_1zzz
这个作者很懒,什么都没留下…
展开
-
变量(auto、static、extern、register)及其生存周期
1C+ +中变量的存储类型分为如下几种类型:auto——函数内部的局部变量(auto可省略不写)。static——静态存储分配,又分为内部和外部静态。extern——全局变量(用于外部变量说明)。register——变量存储在硬件寄存器中。(1)自动变量①在函数内部定义的局部变量即为自动变量,用于说明自动变量的关键字auto可以省略。②在函数转载 2017-07-10 11:12:23 · 1697 阅读 · 0 评论 -
进程控制理论
进程控制理论 什么是进程?什么是多进程?进程的分类? 进程和程序的区别? linux进程管理,有哪些管理工具?作用? 进程的三态是什么?进程的结构有哪些? 进程的调度算法有哪些?什么是优先级反转? 什么是死锁?什么是同步?什么是互斥? 进程的退出 进程退出有几种方式?有什么区别? 掌握exit和_exit的函数用原创 2016-10-29 22:00:38 · 873 阅读 · 0 评论 -
exec函数族
1.execl 函数的作用:执行文件函数的原型:int execl(const char *path,const char *arg,…);返 回 值:成功:函数不返回 失败:函数返回-1#include int main(){execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,NULL); return 0原创 2016-10-28 23:59:35 · 240 阅读 · 0 评论 -
线程的同步、互斥机制
整理线程同步的API函数及其作用线程同步的方式和机制临界区、互斥量、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程原创 2016-11-09 21:53:52 · 836 阅读 · 0 评论 -
堆和栈
堆和栈的概念在具体的C/C++编程框架中,这两个概念并不是并行的。深入到汇编级进行研究就会发现,栈是机器系统提供的数据结构,而堆是由C/C++函数库提供的。这两个概念可以从数据结构和系统两个层次去理解:1、从数据结构层次理解,栈是一种先进后出的线性表,只要符合先进后出的原则的线性表都是栈。至于采用的存储方式(实现方式)是顺序存储(顺序栈)还是链式存储(链式栈)是没有关系的。2、从系统层原创 2016-10-28 20:36:52 · 294 阅读 · 0 评论 -
不带缓存的IO操作
不带缓存的IO操作 Linux操作系统的优缺点?Linux系统的优点:1、免费,开源2、系统小,占用资源少3、方便程序员进行程序的开发与学习,如学习系统内核与系统管理4、目前超级计算机中Linux是占很大一个比例的Linux系统的缺点:1、可扩展性 随着2.6内核的出现,可扩展性已经不再像原来那样重要,但是Linux一直都没有像Unix那样的扩展性。一般来说原创 2016-10-27 22:29:29 · 533 阅读 · 0 评论 -
信号量实现线程之间的PV操作
1.信号量实现线程之间的PV操作,实现线程同步和互斥的数据模型?(1).sem_init函数函数作用:初始化信号量函数原型:int sem_init(sem_t *sem,int pshared, unsigned int value)参数:sem:信号量指针 Pshared:决定信号量能否在几个进程间共享,一般取0 Value:信号量的初始值(2)原创 2016-11-08 00:07:07 · 927 阅读 · 0 评论 -
linux多线程-互斥锁
互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源。实现机制:(函数说明)需要的头文件:pthread.h1) 初始化互斥锁函数的原型:int pthread_mutex_init(pthread_mutex_t*mp, const pthread_mutexattr_t *mattr)函数的参数:mutex:互斥锁 matt原创 2016-11-07 23:56:20 · 401 阅读 · 0 评论 -
对一个文件多个读写
如果对一个文件多个读写怎么办?Linux下多个进程或线程同时对一个文件进行写操作,如何解决冲突?使用flock(锁定文件或解除锁定),简单可行!先介绍一下flock函数吧头文件 #include定义函数 int flock(int fd,int operation);函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作原创 2016-10-26 21:33:26 · 505 阅读 · 0 评论 -
多线程概述
多线程实现一.线程和进程之间的关系,与进程相比线程有哪些优点?1.线程和进程的关系线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。进程——资源分配的最小单位,线程——程序执行的最小单位"原创 2016-11-06 22:00:58 · 341 阅读 · 0 评论 -
如何运用文件的读写操作完成两个文件的复制?
如何运用文件的读写操作完成两个文件的复制?#define BUFFSIZE 4096int main(int argc,char *argv[]){char file_in[BUFFSIZE];char file_out[BUFFSIZE];char buf[BUFFSIZE];int fd_in;int fd_out;int n;if(argc == 3){if((原创 2016-10-25 21:09:12 · 522 阅读 · 0 评论 -
linux进程通信——消息队列(相互通信)
上一节讲述消息队列单发单收的情况,那么消息队列能否实现相互通信呢?请看下面例题:msg11.c#include #include #include #include #include #include #include #include #define MAX_TEXT 512struct my_msg_st{ long int my_msg_type;原创 2016-11-05 20:54:56 · 505 阅读 · 0 评论 -
linux进程通信-消息队列
消息队列管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。1. 消息队列的理论消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式.进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。创建打开消息队列msgget()读数据从队列msgrcv()写数据到队列msgsnd()控制原创 2016-11-04 19:46:08 · 304 阅读 · 0 评论 -
如何判断文件大小?
如何判断文件大小?判断文件大小:利用fseek和ftell获取文件的大小1.1fseek、ftell介绍int fseek(FILE *stream, long offset, intwhence);功能:该函数是将文件指针移到指定的位置。参数:stream表示用fopen打开的文件HANDLE(入参) offset表示文件指针的偏移位置(入参)原创 2016-10-24 22:03:56 · 1940 阅读 · 0 评论 -
进程的创建
进程的创建1.详解进程创建的几类函数的说明:fork,vfork,exec,system?(1)获取ID#include #include pid_t getpid(void) 获取本进程ID。pid_t getppid(void) 获取父进程ID(2)启动进程(a)pid_tfork(void)功能:创建子进程 fork的奇妙原创 2016-10-30 23:24:14 · 389 阅读 · 0 评论 -
有名管道和无名管道
1. (1)数据传输 一个进程需要将它的数据发送给另一个进程(2)资源共享 多个进程之间共享同样的资源(3)通知事件 一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件(4)进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变2.发展L原创 2016-10-31 21:53:47 · 17067 阅读 · 1 评论 -
TCP的三次握手协议与TCP/UDP结构
熟悉TCP的三次握手协议三次握手TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后进行数据通信,最后拆除连接三个过程。TCP在建立连接时又分三步走:第一步(A->B):主机A向主机B发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;第二步(B->A):主机B在收到客户端的S原创 2016-11-15 23:17:08 · 616 阅读 · 0 评论 -
Matlab安装使用libsvm
防止别人重复犯一些错误,把网络上看到得东西总结一下,希望对某些人有些帮助。一.下载libsvmhttp://www.csie.ntu.edu.tw/~cjlin/libsvm/在libsvm的网站上下载 libsvm-3.12.zip文件,解压后放在任意目录下,最好放在MATLAB工具箱中,比如 C:\Program Files\MATLAB\R2011a\toolbox\libs原创 2017-05-13 16:05:21 · 569 阅读 · 0 评论 -
Linux如何识别U盘
方案一: Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。USB移动存储设备通常被识别为sda1,具体可以通过fdisk -l命令查询。 在使用U盘前,我们先要为外挂点新建一个子目录,一般外挂点的子目录都是建立在/mnt里面的,我们也建在那里,当然也可以建在/目录下,名字可以自己定,我们就取名为usb,终端下的命令如下转载 2017-05-23 09:39:08 · 15721 阅读 · 0 评论 -
TCP的多个客户端连接服务器
通过父子进程实现TCP的多个客户端连接服务器tcp_sever_fork.c#include #include #include #include #include #include #include #define PORT 3333int main(){ int sockfd; int sock_fd; struct sockaddr_in原创 2016-11-23 21:59:52 · 3398 阅读 · 0 评论 -
UDP服务器客户端相互通信
UDP服务器、客户端之间的相互通信之前的版本只能实现UDP服务器之间单发单收,此版本能实现UDP服务器和客户端之间的相互通信。见下面的程序:udp_server.c#include #include #include #include #include #include #include #define PORT 3333int main(){ int原创 2016-11-22 22:34:58 · 3598 阅读 · 1 评论 -
TCP服务器、客户端之间的相互通信
TCP服务器、客户端之间的相互通信之前的版本只能实现TCP服务器之间单发单收,此版本能实现TCP服务器和客户端之间的相互通信。见下面的程序:tcp_server.c#include #include #include #include #include #include #include #define PORT 3333int main(){ int原创 2016-11-21 20:28:46 · 2413 阅读 · 0 评论 -
UDP编程模型
UDP编程模型基于UDP服务器1) 创建一个socket,用函数socket()2) 绑定IP地址、端口等信息到socket上,用函数bind()3) 循环接收数据,用函数recvfrom()4) 关闭网络连接基于UDP客户端1) 创建一个socket,用函数socket()2)原创 2016-11-20 20:18:28 · 481 阅读 · 0 评论 -
TCP编程模型
TCP编程模型基于TCP服务器1) 创建一个socket,用函数socket()2) 绑定IP地址、端口等信息到socket上,用函数bind()3) 设置允许的最大连接数,用函数listen()4) 接收客户端上来的连接,用函数accept()5) 收发数据,用函数send()和recv(),或者read()和wr原创 2016-11-19 22:30:14 · 590 阅读 · 0 评论 -
网络编程常见函数
进行Socket编程的常用函数有:Socket : 创建一个socketBind: 用于绑定IP地址和端口号到socketConnect: 该函数用于绑定之后的client端与服务器建立连接listen:设置能处理的最大连接要求,Listen()并未开始接收连线,只设置socket为listen模式accept:用来接受socket连接send:发送数据recv:接收原创 2016-11-18 21:10:42 · 515 阅读 · 0 评论 -
网络编程简介
网络编程简介一.socket1. 概念Linux中的网络编程通过Socket(套接字)接口实现,Socket是一种文件描述符2. 套接字socket有三种类型:(1) 流式套接字(SOCK_STREAM)流式的套接字可以提供可靠的、面向连接的通讯流。它使用了TCP协议。TCP保证了数据传输的正确性和顺序性(2) 数据报套接字(SO原创 2016-11-17 20:38:44 · 391 阅读 · 0 评论 -
OSI和TCP/IP协议模型简介
一.OSI协议模型OSI协议参考模型,它是基于国际标准化组织(ISO)的建议发展起来的,它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。这个7层的协议模型虽然规定得非常细致和完善,但在实际中却得不到广泛的应用,其重要的原因之一就在于它过于复杂。但它仍是此后很多协议模型的基础。与此相区别的TCP/IP协议模型将OSI的7层协议模型简化为4层,从而更原创 2016-11-14 19:47:32 · 591 阅读 · 0 评论 -
linux进程通信-信号
1.信号的分类,常用的几种信号来源?信号的分类: 可靠性方面:可靠信号和不可靠信号 与时间上的关系:实时信号与非实时信号常见的信号:§ SIGHUP: 从终端上发出的结束信号§ SIGINT: 来自键盘的中断信号(Ctrl-C)§ SIGKILL:该信号结束接收信号的进程,杀死进程§ SIGTERM:kill 命令发出的信号§ SIGCHLD:子进程停止或结原创 2016-11-01 22:57:20 · 352 阅读 · 0 评论 -
wireshark抓包工具的使用
Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用 WinPCAP作为接口,直接与网卡进行数据报文交换。Wireshark环境搭建1)Windows环境 下载一个安装包,默认配置,一路 next即可完成安装。安装包下载请点此处。2)ubuntu环境原创 2016-11-16 22:26:57 · 790 阅读 · 0 评论 -
SQL语句
一.SQL语法1. SQL功能数据定义(DDL):用户定义、删除和修改数据模式数据查询(DQL):用于查询数据数据操纵(DML):用于增、删、改数据数据控制(DCL):用于控制数据访问权限2. 语法SQL的语法很像自然语言。每个语句都是一个祈使句,以动词开头,表示所要做的动作。3. 命令SQL由命令组成,每个命令以分号(;)原创 2016-11-12 23:04:21 · 510 阅读 · 0 评论 -
linux进程通信-信号量
信号灯1. 信号量(1)概念信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源.进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。(2)分类二值信号灯:信号灯的值只能取0或1,类似于互斥锁。 但两者有不同:信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值;互斥锁更强调进程,占用资源的原创 2016-11-03 20:17:44 · 526 阅读 · 0 评论 -
API函数
有哪些API函数?函数的作用,入参,返回值是什么?一.基于文件描述符1.creat 函数的作用:创建一个文件; 函数的原型: int creat(const char*pathname, mode_t mode); 文件头: #include #include #includ原创 2016-10-23 21:52:42 · 347 阅读 · 0 评论 -
运算符与表达式(一)——算术运算符
算术运算符:用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算%)、自增(++)、自减(--)初学C语言时一直以为很简单的自增、自减,却每次都算错,颠覆人生观啊有没有!C语音学了两年后,仍然算错,下面就来一波自增运算,感觉这辈子都不会错了呢!首先,说一下i++,++i的区别:i++: i使用完再自加++i: i自加后再使用废话不多说,实例原创 2016-07-16 08:53:07 · 624 阅读 · 0 评论 -
编译预处理
1. 宏定义指令1) 定义变量与命令(避免幻数)2) 定义宏函数3) 自定义函数与宏函数的区别4) 内置宏定义5) typedef与#define的区别6) 枚举与#define的区别2. 条件编译指令#ifdef、#ifndef主要用于防止重复包含。我们一般在.h头文件前面加上这么一段:原创 2016-07-26 10:32:01 · 412 阅读 · 0 评论 -
数据类型四——格式化输出和输入
一.格式化输入函数1. scanf函数的使用scanf函数的一般形式:scanf(格式控制,地址表列)格式字符说明: %a,%A 读入一个浮点值(仅C99有效) %c 读入一个字符 %d 读入十进制整数 %o 读入八进制整数 %x,%X 读入十六进制整数 %s 读入一个字符串,遇空格、制表符或换行符结束。 %f,%F,%e,%E,%原创 2016-07-14 15:37:54 · 2770 阅读 · 0 评论 -
C语言数据类型(二)——数据类型重要知识点
一.字节长度bit、字节(B)=8bit、半字=2个字节=16bit、字=4个字节=32bit1. 计算机存储方式int num = 5;int *p = #int **p = &p;1. 如何测量变量的字节长度int num = 5;sizeof(num)或sizeof num或sizeof(int)但不能写成sizeof intsizeo原创 2016-07-12 23:04:03 · 736 阅读 · 0 评论 -
复合数据类型
复合数据类型struct结构体union共用体enum枚举原创 2016-07-25 10:52:53 · 630 阅读 · 0 评论 -
C语言数据类型(三)——变量与常量
一.什么是变量?变量的特点?什么是变量? 其值在其作用域内可以改变的量成为变量。一个变量应该有一个名字,在内存中占据一定的存储空间。变量在使用前必须要定义,每个变量都有自己的地址,变量依据其定义的类型,分为不同类型,如整型变量,字符型变量,浮点型变量,指针型变量等。变量的值可以发生改变,意味着它可以被覆盖,被写入,被赋值,每个变量必须要有一个名字和它所在内存空间绑定。变量的三大特原创 2016-07-13 23:09:02 · 659 阅读 · 0 评论 -
C语言概述
一.嵌入式开发中为什么选择C语言(C语言久盛不衰的主要原因)?操作系统内核都是用C语言实现的。那为什么操作系统内核都是用C语言实现呢?1. C语言特点*C语言有出色的移植性,能在不同体系结构的软/硬件平台上运行。(修改的地方越少移植性越好)什么是代码移植性?如何提高代码移植性?可移植性并不是指所写的程序不作修改就可以在任何计算机上运行,而是指当条件有变化时,程序无原创 2016-07-11 14:19:08 · 470 阅读 · 0 评论 -
C语言数据类型(一)——基本知识点
一.什么是数据类型?数据集合的划分,不同数据类型对CPU意义是不一样的二.数据类型有哪些?如何定义变量?*一个整型数 int a;整型变量*一个指向整型数的指针 int*a;整形指针变量*一个指向指针的指针,它指向的指针是指向一个整型数的 int **a;整型指针的指针变量*一个有10个整型数的数组 int a[10];整型数组*一个有10个原创 2016-07-12 23:01:42 · 488 阅读 · 0 评论