![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 60
我是马克思小清新
这个作者很懒,什么都没留下…
展开
-
pip3 安装mysqlclient报错
最近在Liunx搞 Django项目,需要用到数据库,就pip3 安装mysqlclient.结果报错,不仅报错,还不停得重复连接下载报错的界面,真是头大。上网查了资料,说是没有mysql的配置源。根据网上的资料 执行命令yum install mysql-devel,又报错。应该是缺少mysql的yum源为此一个一个解决。解决方案:1,下载对应版本mysql的yum源的rpm包。我的mysql是5.7.31.centos7.8。不知道系统的版本号可以通过命令cat...原创 2021-09-10 14:39:17 · 1272 阅读 · 0 评论 -
c语言栈实现括号匹配
在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个表达式中的括号是否 相匹配? 匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号将与最近遇到的那个左括 号相匹配。则可以在从左至右扫描过程中把所遇到的左括号存放到堆栈中。每当遇到一个 右括号时,就将它与栈顶的左括号(如果存在)相匹配,同时从栈顶删除该左括号。 算法思想:设置一个栈,当读到左...原创 2016-11-17 21:35:07 · 2793 阅读 · 0 评论 -
不借助中间变量求两个数的和
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h> //不使用中间变量交换两个数的值void exchange_num(int *a, int *b){ ①* a =*a + *b; //适用范围广 * b = *a -* b; ...转载 2016-10-24 23:02:45 · 244 阅读 · 0 评论 -
十进制转换成二进制及掩码生成
十进制转换成二进制void change (int num){ unsigned int temp; unsigned int mask = 1; int i;for(i = 31; i >= 0;i--){ temp = ((unsigned int)num >> i) & mask; printf("...原创 2016-07-17 23:21:15 · 1330 阅读 · 0 评论 -
野指针及其有效的避免方法
野指针的生成及其产生的原因一,指向不确定地址的指针变量。(即没有初始化)使用野指针易因内存泄露出现段错误。而造成内存泄露的原因有两个:1,访问了没有权限的内存,如果正确使用指针,系统会给指针分配相应的内存空间,如果指针指向了的内存不是系统分配的,则判定为没有权限。2,访问了已经释放的内存。二,指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。...原创 2016-07-16 16:30:23 · 873 阅读 · 0 评论 -
自编字符串函数
//计算字符串的长度int my_strlen(char *s) { int i = 0; while(*s != '\0') { i++;s++; } return i;}//将字符数组str的内容拷贝到字符数组dest中char *my_strcpy(char *dest,char *str){ char...原创 2016-07-15 19:48:01 · 405 阅读 · 0 评论 -
scanf的正确使用及技巧
它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。使用scanf函数时要加上#include <stdio.h>。首先从键盘读入键盘缓冲区(buffer)的数据都是以ASCII码存储的(包括回车)。例如:#incude<stdio.h>int main(){ char a; char b; ...原创 2016-07-14 14:17:13 · 13304 阅读 · 0 评论 -
进程的虚拟地址空间划分
虚拟地址 (virtual address): CPU启动保护模式后,程序运行在虚拟地址空间中。注意,并不是所有的“程序”都是运行在虚拟地址中。CPU在启动的时候是运行在实模式的,Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的。每一个进程被给予它的非常私有的虚拟地址空间。对于32位的进程,地址空间是4G因为一个32位指针能够有从0x00000000到0xf...原创 2016-07-11 14:37:16 · 1073 阅读 · 0 评论 -
面向过程和面向对象语言的区分。
面向对象:指的是在进行程序设计时,以对象为单位进行控制。面向过程:指的是在进行程序设计时,以过程为单位进行控制。 例如,“上学”这件事情。面向对象: 妈妈 做早饭。 孩子 吃早饭。 孩子 背书包。 妈妈 上公交 孩子 上公交。 孩子 到学校。 妈妈 回家。 面向过程: 切菜,点火,炒菜,热米饭 吃...原创 2016-07-11 14:26:07 · 498 阅读 · 0 评论 -
sqlite3的基本知识
sqlite常用的接口函数:1、sqlite3_open 功能:打开一个数据库,如果该数据库不存在,则会自动创建,打开或者创建数据库的命令会被缓存,直到这个数据库真正被调用的时候才会被执行 原型:int sqlite3_open(const char *dname,sqlite3 **db) 参数:dname:要打开的数据库的名字,包含路径,SQLite支持内存数据库,内存方式存...转载 2016-11-01 23:00:49 · 474 阅读 · 0 评论 -
sprintf函数
printf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] … );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以”%”开头的格式说明符(format sp...转载 2016-11-13 22:36:59 · 265 阅读 · 0 评论 -
进程和线程的区别
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶 属于进程的资源 (4)系统开销:由于在创建或撤销进程时,操作系统为此所付出的开销将显著地大于在 创建或撤消线程时的开销。类似的。进程...转载 2016-12-04 23:04:14 · 202 阅读 · 0 评论 -
子网掩码
子网掩码(subnet mask)是每个使用互联网的人必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置。子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式。对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。利用子网掩码可以把大的网络划分成子网,...转载 2016-12-21 21:49:35 · 322 阅读 · 0 评论 -
回调函数
1.回调函数是一个很有用,也很重要的概念。当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数。2.回调函数就相当于一个中断处理函数,由系统在符合你设定的条件时自动调用。为此,你需要做三件事:1,声明;2,定义;3,设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于系统调用。3.所谓回调函数就是按照一定的形式由你定义并编写实现内容,当发生某种...转载 2016-12-16 22:17:38 · 233 阅读 · 0 评论 -
C语言中的函数大概执行过程
函数名是一个指针常量,保存的是函数入口地址。1、通过函数名找到函数入口地址2、给形参分配空间3、给形参传值4、执行函数体语句5、返回返回值,释放空间函数传参注意; 当只使用不修改实参变量对应空间的值,传实参变量名。 当即使用也修改实参变量对应空间的值,传实参变量对应空间的地址。...转载 2016-12-17 20:36:46 · 535 阅读 · 0 评论 -
枚举
枚举类型在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能...转载 2016-12-15 23:12:52 · 218 阅读 · 0 评论 -
数据结构--双向循环链表--插入
//把P赋值给S的前驱,如1a -> prior = p;//把P-> next 赋值给S的后继,如2a -> next = p -> next;//把s赋值给p->next的前驱,如3p -> next -> prior = s;//把s赋值给p的后继,如4p -> next = s...原创 2016-11-23 22:44:05 · 496 阅读 · 0 评论 -
内存溢出
在程序员设计的代码中包含的“内存溢出”漏洞实在太多了。导致内存溢出问题的原因有很多,比如:(1) 使用非类型安全(non-type-safe)的语言如 C/C++ 等。(2) 以不可靠的方式存取或者复制内存缓冲区。(3) 编译器设置的内存缓冲区太靠近关键数据结构。下面来分析这些因素:1. 内存溢出问题是 C 语言或者 C++ 语言所固有的...转载 2016-12-13 21:50:25 · 340 阅读 · 0 评论 -
进程和线程的区别
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源(4)系统开销:由于在创建或撤销进程时,操作系统为此所付出的开销将显著地大于在创建或撤消线程时的开销。类似的。进程切换的开销也远大于线程切换的开...转载 2016-12-07 22:46:27 · 245 阅读 · 0 评论 -
8位有符号数的取值范围
首先我们知道,计算机以补码的形式存储的,正数的补码是原码不变,负数的补码是原 码 的取反加1。 我们先来看+127,原码0111 1111对吧,若+128是多少呢,0111 1111 + 1 = 1000 0000 (原码),然后存储时,计算机一看是最高位为1,就保持符号位不变,后面7位取反加 1,然后呢,进位舍弃,还是1000 0000(-128)。所以...转载 2016-12-05 22:42:51 · 6758 阅读 · 1 评论 -
将一个任意输入的10进制数转化为16进制形式输出
//将一个任意输入的10进制数转化为16进制形式输出#include<stdio.h>#define MAXSIZE 11void ten20x(unsigned int a,char *p){ int i; int j = 2; int sum = 0; int count = 0; unsigned int mask = 0x80...转载 2016-12-18 19:33:18 · 2799 阅读 · 0 评论 -
strcpy拓展
一个标准的strcpy函数:原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。下面给出网上strcpy的得分版本:2分 void strcpy( char *strDest, char *strSrc ){ while( (*strDest++ = * strSrc++) != '\0’ );} 4分 void strcpy( char...转载 2016-12-22 22:32:57 · 285 阅读 · 0 评论 -
CS和BS
一、什么是CS和BS结构? 1.C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQLServer。客户端需要安装专用的客户端软件。 2.B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Intern...转载 2016-12-23 23:06:12 · 533 阅读 · 0 评论 -
堆栈的初认识
平时都堆栈,堆栈地称呼“堆”和“栈”两个概念,还以为它们是同一个概念的,实际上是两个概念,之前我有对数据存放空间进行过基本了解,现在是针对堆和栈,进行比较分析。堆和栈都是一种数据结构,都可以数据项按序排序,都只能在一端对数据项进行插入与删除。堆: 1、堆是先进先出; 2、堆一般是由程序员分配的,生命周期也完全由使用者控制,如果程序员不释放,程序结束时可能由OS回收; 3...转载 2016-10-23 23:27:09 · 682 阅读 · 0 评论 -
linux进程通信的方式(1)
Linux进程间通信方式一, 无名管道1, 无名管道(pipe)特点:单向的,先进先出, 只用于父子进程间的同信 管道尾部写入数据,管道头部独处数据 被读取的数据,将不存在管道中,其他的进程也读不到。 管道对于进程两端而言,也是文件操作,所以,可以用不带缓冲的文件操作函数进行相应的读取。2, 管道操作...原创 2016-10-22 22:55:46 · 297 阅读 · 0 评论 -
liunx--文件----不带I/o缓冲的操作
不带缓存的I/O操作1, creat函数函数作用:创建一个文件函数原型:int creat(const char *pathname,mode_tmode)函数参数:*pathname:文件的路径或者文件名 mode:文件的属性 S_IRUSR:可读 S_IWUS...原创 2016-10-21 18:46:45 · 376 阅读 · 0 评论 -
C语言中的关键字
register作用:请求编译器尽可能地将变量存在CPU内存寄存器中。而不是通过内存寻址访问的方 法,好处:省去了CPU处理访问内存数据的时间。注意事项:1,register修饰变量的类型必须是CPU能够接受,register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度,2,register变量可能不是在内存中存储,所以不能用&来取地址,因为&原创 2016-07-28 08:44:37 · 263 阅读 · 0 评论 -
linux中的Make使用模板
如何使用make基于实现加减乘除的程序先建立一个test的根目录,在根目录中建立add ,sub,div,mul,main,scripts子目录和文件Makefile在每个子目录中建立目录src和文件Makefile根据每个功能目录的名字,在其src中,建立.c文件 图中的.o文件是已经编译好的。打开scripts目录中的Mak...原创 2016-07-08 20:26:57 · 374 阅读 · 0 评论 -
数组的认识
一,数组1,数组的定义 #define MAX_SIZE 1000 int a[MAX_SIZE]; int a[MAX_SIZE][MAX_SIZE];可以省略行,但是不可以省略列使用宏定义来确定数组的大小,易于移植int a[]={1.2.3};此时数组的大小是sizeof(a) = 12; 2,将数组初始化为0 a[MAX_SIZE...原创 2016-07-18 17:16:29 · 294 阅读 · 0 评论 -
linux下gcc编译优化选项的大体操作是怎么样的?
起因: 目前项目使用nios IDE作为开发平台,其使用的编译器为gcc的交叉编译器。在设定编译条件时,在debug模式下生成的程序正常,但是在release模式下会出现LCD显示的开端显示不全,缺少一个字节或字的状况。为了了解具体为什么造成该问题,对两种模式下的配置做了对比,编译器皆为nios2-elf-gcc交叉编译器,debug模式编译器参数为:-DALT_DEBUG -O0 ...转载 2016-07-07 09:50:45 · 1408 阅读 · 0 评论 -
linux中gcc编译器的链接过程是怎么样的?
链接的过程实际上是为了解决多个文件之间符号引用的问题(symbol resolution)。编译时编译器只对单个文件进行处理,如果该文件里面需要引用到其他文件中的符号(例如全局变量或者函数),那么这时在这个文件中该符号的地址是没法确定的,只能等链接器把所有的目标文件连接到一起的时候才能确定最终的地址。这个填写地址的过程,根据填写的地址的类型和时机,可以分为解决程序内部跨文件引用的链接时重定位、引...转载 2016-07-07 09:30:05 · 686 阅读 · 0 评论 -
malloc,ralloc,calloc的区别
三个函数的原型void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(size_t numElements, size_t sizeOfElement); 使用的时候都要加头文件stdlib.h。它们的作用是,请求系统分配地址,返回原创 2016-07-23 19:32:01 · 339 阅读 · 0 评论 -
linux下的main 函数
main()函数,想必大家都不陌生了,从刚开始写程序的时候,大家便开始写main(),我们都知道main是程序的入口。那main作为一个函数,又是谁调用的它,它是怎么被调用的,返回给谁,返回的又是什么?这次我们来探讨一下这个问题。1. main()函数的形式先来说说main函数的定义,较早开始写C程序的肯定都用过这样的定义void main(){},其实翻翻C/C++标准,从来没有定义过voi...转载 2016-11-04 23:22:43 · 1838 阅读 · 0 评论 -
linux进程通信---消息队列
进程通信方式----消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息,对消息队列有读权限的进程可以从中读走消息。消息队列是随内核持续,只有在内核重启或者显示删除一个队列时,该消息队列才会真正被删除。消息队列的结构:队列头:struct msg_queue来描述,该结构体中包含消息队列...原创 2016-10-25 23:18:24 · 322 阅读 · 0 评论 -
套接字
一、什么是socket socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。也因为这样,套接字明确地将客户端和服务器区分开来。二、套接字的属性套接字的特性由3个属性确定,它们分别是:域、类型和协议。1、套接字的域它指定套接...转载 2016-12-24 22:48:55 · 413 阅读 · 0 评论 -
小端字节和大端字节
小端字节序:低字节放在低地址处,高字节放在高地址处。大端字节序:低字节放在高地址处,高字节放在低地址处。int num = 0x12345678;用共用体来测试变量在内存中存放的字节顺序union node{ int num; char ch; };int main(){ union node n; n.num原创 2016-11-20 22:27:02 · 410 阅读 · 0 评论 -
基于UDP的编程步骤
基于UDP--服务器 1.创建一个socket,用函数socket()2.绑定IP地址、端口等信息到socket上,用函数bind()3.循环接收数据,用函数recvfrom()4.关闭网络连接 基于UDP--客户端 1.创建一个socket,用函数socket()2.绑定IP地址、端口等信息到socket上,用函数bind()3.设置对方的...原创 2016-11-14 19:51:28 · 407 阅读 · 0 评论 -
基于TCP的编程的大概步骤
基于TCP的服务器1. 创建一个socket,用函数socket()2. 绑定IP地址、端口等信息到socket上,用函数bind()3.设置允许的最大连接数,用函数listen()4.接收客户端上来的连接,用函数accept()5.收发数据,用函数send()和recv(),或者read()和write()6.关闭网络连接 基于TCP的客户端 1.创...原创 2016-11-14 19:31:04 · 479 阅读 · 0 评论 -
linux平台--通讯录
代码:#include#include#include#define MAX_SIZE 1024struct node{ int id; char name[MAX_SIZE]; char phone[MAX_SIZE]; char address[MAX_SIZE]; struct node *next;};原创 2016-10-07 21:53:55 · 357 阅读 · 0 评论 -
linux---进程---信号灯
信号量,又称信号灯,主要用于进程间以及同一进程不同线程间的同步手段,用来解决进程间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该变信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。其中信号量对应于某一种资源,取一个非负的整型值。信号量的值是指当前可用的资源数量,若它等于0则意味着目前没有可用的资源。信号灯与其他的进程间通信方式不太相同,因为它主...原创 2016-10-28 22:37:47 · 367 阅读 · 0 评论