
C语言
文章平均质量分 57
ZalGGboy
这个作者很懒,什么都没留下…
展开
-
linux 16.04更新gcc版本(切换版本)
将版本更新至gcc-81.下载gcc-8、g++-8sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo sudo apt-get updatesudo apt-get install -y g++-82.切换版本cd /usr/bin #进入/usr/bin文件夹下sudo rm -r gcc...原创 2019-07-16 10:46:59 · 2315 阅读 · 0 评论 -
Top命令实现代码解析(CPU、进程CPU使用率)
1、获取总的cpu信息# cat /proc/statcpu 161911 2406 35826 1860803 14982 685 3810 0cpu0 161911 2406 35826 1860803 14982 685 381 0 0intr 3304665 0 0 0 0 0 0 0 0 0 0 0 1102551 181196 0 0 0 0 0 0 0 0 14306...原创 2019-01-25 15:13:07 · 2706 阅读 · 0 评论 -
深入理解互斥锁的实现
在实际的软件编程中,经常会遇到资源的争用,比如下面的例子:[cpp] view plaincopy class Counter { private: int value; public: Counter(int c) { value = c; } int GetAndIncrement() { int temp = val...原创 2019-01-08 16:08:14 · 3979 阅读 · 1 评论 -
自旋锁和互斥锁区别
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机制:...原创 2019-01-08 16:07:01 · 1532 阅读 · 1 评论 -
CMake常用变量和常量环境变量查表手册——整理
一,cmake 变量引用的方式:前面我们已经提到了,使用${}进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过${}取值二,cmake 自定义变量的方式:主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_BINARY_DIR 和<projectname>_SOURCE_DI...原创 2018-12-26 10:15:03 · 2327 阅读 · 0 评论 -
CMake的使用——详细整理
一、 基本使用安装:下载二进制包后可直接解压使用从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败使用:cmake dir_path,生成工程文件或makefile文件二、 概念out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录...原创 2018-12-26 10:13:33 · 449 阅读 · 0 评论 -
UBUNTU16.04 NDK 安装与配置
1、下载Android NDK自解压包,官方地址:https://developer.android.com/ndk/downloads/index.html#download下载:$ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin2、解压,将Android NDK压缩包解压到你想要...原创 2018-12-28 14:30:27 · 3133 阅读 · 0 评论 -
CMake教程
转自http://blog.youkuaiyun.com/ljt20061908/article/details/11736713 0. 前言 一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使用方法,现在有时间拿出来整理一下。本文假设你已经学会了cmake的使用方法,如果你还不会使用cmake,请参考相关资料之后再继续向下看。 本文中介绍的是生成可执行程序的方法和步骤,生...转载 2018-12-17 16:32:23 · 409 阅读 · 0 评论 -
宏实现大小端转换
宏实现大小端转换/* 定义多行宏时在每一行后面加 '\' */#define sw16(x) \ ((short)( \ (((short)(x) & (short)0x00ffU) << 8 ) | \ (((short)(x) & (short)0xff00U) >> 8 ) )) 假设x=0x...原创 2018-09-08 16:34:51 · 5696 阅读 · 0 评论 -
面试经历(一):const在C和C++中的作用?
1.C++中const的作用在C/C++开发中经常会用到const,这个修饰符。今天就讨论一下它的作用。(1) const用于定义常量:const定义的常量编译器可以对其进行数据静态类型安全检查。这个是开发中经常用到的const的最基本的作用。(2) const修饰函数形式参数:当输入参数为用户自定义类型和抽象数据类型的时候(就是自己定义的类),应该将“值传递”改为“const &am...原创 2018-08-22 11:37:02 · 1055 阅读 · 0 评论 -
C语言项目(五)——基于Linux系统下的带有GUI界面的即时通信软件——界面演示
知识点:1.TCP/IP通信(端口号、ip地址、网关)2.多路复用、多线程并发、线程同步3.sqlite3数据库、保存注册用户、离线用户、聊天记录4.系统调用、文件传输5.Makefile(自学)6.Ncurses界面库,菜单域、表单域、窗口、ncurses语法函数(自学)7.C语言、数据结构(线性表) + 算法(大量算法) 源代码暂不发送、正不断完善,虽然是个...原创 2018-08-01 09:43:13 · 3146 阅读 · 4 评论 -
C语言项目(四)——基于Linux系统下的带有GUI界面的即时通信软件
二十一.TCP是如何保证可靠数据传输的?TCP提供一种面向连接的、可靠的字节流服务。 面向连接:意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。 TCP通过下列方式来提供可靠性:1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序...原创 2018-08-01 09:16:59 · 2212 阅读 · 1 评论 -
C语言项目(三)——基于Linux系统下的带有GUI界面的即时通信软件
十.多线程与多进程通信方式的区别?引入线程的好处(1)易于调度。(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。(3)开销少。创建线程比创建进程要快,所需开销很少。(4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行...原创 2018-07-31 20:29:04 · 1123 阅读 · 0 评论 -
51单片机学习历程(三)点亮单片机的第一盏灯
点亮流水灯共有三种方式1、一盏一盏的操作:即先令第一盏灯亮,延时,再令它熄灭,延时,再让下一盏灯重复操作即可;2、利用数组方法点亮:先定义一个数组,其中存入相应8盏灯亮的数字(即0xfe,0xfd,0xfb,0xf7,0xef,oxdf,0xbf,0x7f:依次代表只有第一盏灯,第二盏灯....亮),再利总线,按顺序点亮八盏灯;3、利用移位方法点亮:(1)、利用移位运算和按位或运算,依...原创 2018-07-21 16:56:41 · 3291 阅读 · 1 评论 -
疑难点精选:linux下 j = ++i + ++i + ++i的结果?
#include <stdio.h>int main(int argc, char **argv){ int i = 1,j; j = ++ i + ++ i + ++ i; printf("%d\n",j); return 0;}在linux下进行编译,最终表达式结果只能这样,其余形式无法通过编译,左值无效;运行结果为10;...原创 2018-07-20 22:53:10 · 1303 阅读 · 0 评论 -
Linux 下的KILL函数的用法及信号中文含义
[ KILL ]功能描述:用于向任何进程组或进程发送信号。头文件用法:#include <sys/types.h> #include <signal.h>int kill(pid_t pid, int sig); 参数: pid:可能选择有以下四种1. pid大于零时,pid是信号欲送往的进程的标识。2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个...原创 2018-07-14 17:24:27 · 2758 阅读 · 0 评论 -
C语言项目(二)——基于Linux系统下的带有GUI界面的即时通信软件
一.项目设计知识点——接上一篇5.为什么选择库函数?什么时候用库函数操作文件? 通过库函数我们可以更好地使用其功能,节省了我们自己写函数的过程,并且对于已经运用成熟的库函数,我们很难写出更加高效的新算法。库函数对文件的操作1.文件分类:通过流进行输入输出:文本文件(存放ASCII码) 和 二进制文件(二进制编码方式)从用户角度: 普通文件 和 设备文件...原创 2018-07-25 16:18:39 · 3216 阅读 · 1 评论 -
CMake——进阶编写
假定有vegagis工程,工程的目录结构如下:#--vegagis# |--src 源文件目录# |--gui 界面工程,输出类型:dll,依赖于QT的QtCore、QtGui、QtXml# |--pending 工程中的源文件,不希望加入到工程中# ## 为了实现跨平台运行,win32和linux目录下实现的是同一套接口,win32不编译linu...原创 2019-01-25 17:05:49 · 766 阅读 · 0 评论 -
Linux下C语言实现线程池例程
什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。 下面是Linux系统下用C语言创建的一个线程池。线程池会维护一个任务链表(每个CThread_worker结构就是一个任务)。 p...原创 2019-01-22 13:00:21 · 508 阅读 · 0 评论 -
ubuntu下top命令源码实现分析
在分析top命令代码实现前,先啰嗦几句。最近的一个linux项目要获取cpu和内存使用率。由于linux并未提供相关的api,因此,只能通过其他手段来获取;最开始使用的方式可简单描述如下:1.构造一个命令字符串,该字符串的功能是通过top命令获取cpu的空闲率;2.使用popen执行该命令;3.使用getline等io函数从管道中读取cpu的空闲率;4.将字符串的空闲率转换...原创 2019-01-22 13:41:09 · 2395 阅读 · 0 评论 -
backtrace和backtrace_symbols函数原理解析
backtrace()是glibc(>=2.1)提供的函数,用于跟踪函数的调用关系。以下对backtrace()函数的说明以及实例,都来自其man page。函数定义 #include <execinfo.h> int backtrace(void **buffer, int size); char **backtrace_...原创 2019-04-02 10:48:27 · 11015 阅读 · 2 评论 -
Linux Signal信号详解
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。一、信号的基本概念本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和...原创 2019-04-02 10:17:33 · 393 阅读 · 0 评论 -
Linux下top命令底层源码Demo
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <dirent.h>#include <sys/types.h>#include <ctype.h>#include <unistd.h>#include <grp...原创 2019-03-27 14:25:01 · 2879 阅读 · 0 评论 -
Android Tombstone(墓碑日志)解决步骤
最近在学习通过墓碑文件定位bug所在位置,网上浏览了很多的博客,大多数只能做到利用addr2line定位到行号但是对于大型项目,尤其是C++代码较多的情况下,很难去准确定位到内存越界、内存溢出等问题(全球性难题,没办法)。在这里整理一下,尽量给自己和大家提供一些路径:1. https://blog.youkuaiyun.com/Zhanganliu/article/details/87715961...原创 2019-03-07 11:32:28 · 5856 阅读 · 0 评论 -
C语言字符检测函数:isalnum、isalpha、isascii、iscntrl、isdigit、isgraph、islower、isspace、ispunct、isupper
C语言中文网http://c.biancheng.net/cpp/html/112.html 头文件:#include<ctype.h>(1)isalnum(c)检查参数 c 是否为英文字母或阿拉伯数字, 在标准c 中相当于使用"isalpha(c) || isdigit(c)"做测试.【参数】c 为需要检测的字符。【返回值】若参数c 为字母或数字,若 c 为 ...原创 2019-03-04 15:16:58 · 1667 阅读 · 0 评论 -
isspace()函数
原型:extern int isspace(int c) 用法:#include <ctype.h> 功能:判断字符c是否为空白符 说明:当c为空白符时,返回非零值,否则返回零。(空白符指空格、水平制表、垂直制表、换页、回车和换行符。) 举例: /*isspace.c*/ #include <stdio...原创 2019-03-04 15:07:52 · 19477 阅读 · 0 评论 -
如何在进程崩溃后打印堆栈并防止数据丢失
进程在运行过程中遇到逻辑错误, 比如除零, 空指针等等, 系统会触发一个软件中断.这个中断会以信号的方式通知进程, 这些信号的默认处理方式是结束进程.发生这种情况, 我们就认为进程崩溃了.进程崩溃后, 我们会希望知道它是为何崩溃的, 是哪个函数, 哪行代码引起的错误.另外, 在进程退出前, 我们还希望做一些善后处理, 比如把某些数据存入数据库, 等等.下面, 我会介绍一些技术来达成这...原创 2019-03-06 10:00:12 · 1608 阅读 · 0 评论 -
access()函数的用法
1.函数功能:检查调用进程是否可以对指定的文件执行某种操作。2.函数原型:1)函数头文件 #include <stdio.h> #include <unistd.h>2)函数int access(const char * pathname, int mode)3)形参pathname:需要检测的文件路劲名mode:需要测...原创 2019-02-26 16:25:33 · 7627 阅读 · 0 评论 -
内存越界详解
内存越界是软件系统主要错误之一,其后果往往不可预料且非常严重。更麻烦的是,它出现的时机是随机的,表现出来的症状是随机的,而且造成的后果也是随机的,这会使程序员很难找出这些 Bug 的现象和本质之间的联系,从而给 Bug 的定位带来极大的困难。一般情况下,内存越界访问可分如下两种:读越界,即读了不属于自己的数据。如果所读的内存地址是无效的,程序立刻崩溃;如果所读内存地址是有效的,在读的时候不会马...原创 2019-02-26 12:01:33 · 6740 阅读 · 1 评论 -
内存泄漏详解
简介内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的...原创 2019-02-26 12:00:02 · 789 阅读 · 0 评论 -
Android Tombstone/Crash的log分析和定位(墓碑文件)
=====项目中遇到进程挂掉的问题,需要分析Tombstone,本文帮了大忙http://blog.youkuaiyun.com/helldevil/article/details/6682211 9楼 adits 2013-04-22 16:20发表 [回复] [引用] [举报]命令使用有误:原文: addr2line -e -f libc.so 0001173c 应该是addr...转载 2019-02-19 16:26:41 · 5448 阅读 · 1 评论 -
Linux 下cmake生成SO库的使用实例
1、创建我的共享库:MySharedLibCMakeLists.txt cmake_minimum_required(VERSION 2.8) project(MySharedLib) # C++11 编译 set(CMAKE_CXX_STANDARD 11) #创建共享库 add_library(MySharedLib SHARED libr...转载 2019-02-13 17:07:42 · 3700 阅读 · 1 评论 -
Android.mk详解
Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。 一、Android.mk文件的用途 一个android子项目中会存在一个或多个Android.mk文件 1、单一的Android.mk文件 直接参考NDK的sampl...原创 2019-02-15 09:53:44 · 444 阅读 · 0 评论 -
linux添加自定义命令
首先使用命令 type 自定义命令 ,查看自定义的命令是否被系统占用其中ML命令是使用 命令 alias自定义的命令 一次性 直接在命令行中输入 例如:输入 alias d=’cd ~/Desktop’ 此时该命令别可以使用,不过仅在当前的命令行界面下,一旦退出之后将无法使用 写入bashrc中 在 computer/etc 的文件夹下可...原创 2019-01-23 10:25:27 · 2523 阅读 · 0 评论 -
statfs结构体和函数详解——例程
因为要读取SD卡的大小和使用情况,所以用到statfs这个函数,功能类似于df命令。需要的头文件:#include <sys/vfs.h> int statfs(const char *path, struct statfs *buf);功能:获取当前文件系统下磁盘空间使用情况。struct statfs {long f_type; /* 文件系统类型 */lon...原创 2019-01-22 17:51:50 · 7178 阅读 · 0 评论 -
参考df源码写的一个简单的df命令的源代码
df命令可以列出加载的磁盘或各种文件的信息: 下面给出一个简单的df的命令的源码,这个源码根据df的源码进行改写,很简单,就一个主文件 :)#include <stdio.h>#include <mntent.h>#include <string.h>#include <sys/vfs.h>static const unsigne...原创 2019-01-22 14:18:12 · 2286 阅读 · 2 评论 -
C语言项目(一)——基于Linux系统下的带有GUI界面的即时通信软件
一.项目设计知识点1.Makefile的作用 makefile的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,ma...原创 2018-07-25 15:05:15 · 3881 阅读 · 0 评论 -
Linux makefile 教程 非常详细,且易懂 ——亲身实践,转载
最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。 于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。 后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比较好理解。能...转载 2018-05-04 20:57:47 · 836 阅读 · 0 评论 -
C语言学习历程(十五)结构体数组实现通讯录
#include <stdio.h> #include<stdlib.h> #include<string.h>struct student { int num; char name[20]; char sex[5]; char phone[15]; }STU[30] = { {1,”chenwenjie”,”male原创 2017-12-16 21:32:53 · 1434 阅读 · 0 评论 -
C语言学历历程(十三)结构体与链表结合编写“增删改查”
#include <*stdio.h> #include<stdlib.h> #define LEN sizeof(struct student)*struct student { long num; float score; struct student *next; };原创 2017-12-06 12:40:30 · 1084 阅读 · 0 评论