自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 cmake使用

cmake使用CMakeLists.txt中常用库文件的查找和链接cmake入门实战cmake中一些预定义变量PROJECT_SOURCE_DIR工程的根目录PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/buildCMAKE_INCLUDE_PATH 环境变量,非cmake变量CMAKE_LIBRARY_PATH 环境变量CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径C

2021-01-29 17:59:54 235

原创 glog

glogglog使用教程#include <iostream>#include <glog/logging.h>#include <fcntl.h>#include <string>int main(int argc, char *argv[]){ /************************************************************ * 参数设置 * ***********************

2021-01-29 14:39:34 140

转载 protobuf使用教程

protobuf使用教程转载于安装protobufsudo apt-get install autoconf automake libtool curl make g++ unzip gitgit clone https://github.com/protocolbuffers/protobuf.gitcd protobufgit submodule update --init --recursive./autogen.sh./configuremakesudo make install

2021-01-28 16:53:53 811

转载 gcc编译常用参数

gcc编译常用参数指定头文件位置 -Igcc hello.c -I ./headers -o hello只做预处理, 编译, 汇编, 不做连接, 拿到二进制文件 -c编译时添加调试信息, 支持gdb调试 -ggcc hello.c -I ./headers -o hello2 -g显示所有警告信息-Wall向程序中动态注册一个宏 -Dgcc hello.c -o hello -D HELLO这种宏定义常可以做开关使用, 用于输出调试信息;#ifdef HELLO #defi

2021-01-26 21:56:03 1038

转载 线程\进程同步

线程\进程同步互斥量mutexLinux中提供一把互斥锁mutex(也称之为互斥量)。每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。资源还是共享的,线程间也还是竞争的, 但通过“锁”就将资源的访问变成互斥操作,而后与时间有关的错误也不会再产生了。但,应注意:同一时刻,只能有一个线程持有该锁。当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁,B阻塞。C线程不去加锁,而直接访问该全局变量,依然能够访问,但会出现数据混乱。所以,互斥锁实质上是操作

2021-01-25 20:02:25 153

原创 线程

线程线程共享资源1.文件描述符表2.每种信号的处理方式3.当前工作目录4.用户ID和组ID5.内存地址空间 (.text/.data/.bss/heap/共享库)线程非共享资源1.线程id2.处理器现场和栈指针(内核栈)3.独立的栈空间(用户空间栈)4.errno变量5.信号屏蔽字6.调度优先级线程优、缺点优点: 1. 提高程序并发性 2. 开销小 3. 数据通信、共享数据方便缺点: 1. 库函数,不稳定 2. 调试、编写困难、gdb不支持 3. 对信号支持不好优点相对

2021-01-24 13:23:00 108

原创 文件和目录

文件和目录stat函数族 返回文件或者目录的信息结构 #include<sys/stat.h> int stat(const char * restrict pathname, struct stat*restrict buf); int fstat(int fd, struct stat* buf); int lstat(const char* restrict pathname,struct stat *restrict buf); int fstatat(int fd,cons

2021-01-20 20:56:32 371

原创 文件IO

文件IO文件描述符是一个非负数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个我文件描述符。当读写一个文件时,使用open或create返回的文件描述符标识该文件,将其作为参数传送给read或write。 - 0: 标准输入 `STDIN_FILENO - 1: 标准输出 STDOUT_FILENO - 2: 标准错误输出 STDERR_FILENOopen和openat函数:打开文件 #include<fcntl.h> int open(const char*

2021-01-20 14:48:24 192

原创 进程

进程getenv函数 获取环境变量值char *getenv(const char *name); 成功:返回环境变量的值;失败:NULL (name不存在)#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char *argv[]){ char *p = NULL; p = getenv(argv[1]); //p = my_getenv(a

2021-01-19 22:57:41 91

原创 进程通信

进程通信① 管道 (使用最简单)② 信号 (开销最小)③ 共享映射区 (无血缘关系)④ 本地套接字 (最稳定)管道管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质:1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个文件描述符引用,一个表示读端,一个表示写端。3. 规定数据从管道的写端流入管道,从读端流出。管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。管道的局限性:① 数据自己读

2021-01-19 22:26:49 189

原创 信号

信号每个进程收到的所有信号,都是由内核负责发送的,内核处理。可以通过man 7 signal命令查看: 默认动作: Term:终止进程 Ign: 忽略信号 (默认即时对该种信号忽略操作) Core:终止进程,生成Core文件。(查验进程死亡原因, 用于gdb调试) Stop:停止(暂停)进程 Cont:继续运行进程与信号相关的事件和状态:信号的处理方式: 1. 执行默认动作 2. 忽略(丢弃) 3. 捕捉(调用户处理函数)Linux内核的进程控制块PCB是一个结

2021-01-19 17:29:08 232

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除