- 博客(46)
- 资源 (18)
- 收藏
- 关注
原创 Linux线程取消
Linux线程可以取消其他线程,被取消的线程会被退出线程本身可以设置不被其他线程取消 相关函数int pthread_cancel(pthread_t thread); //同一进程的线程取消其他线程int pthread_setcancelstate(int state, int *oldstate);//设置线程取消int pthread_setcanceltype...
2018-09-28 14:09:39 962
原创 Linux信号处理方法signal,sigaction和 信号集
信号的处理包括信号的发送、 捕获及信号的处理, 它们有各自相对应的常见函数。 发送信号的函数: kill()、 raise()。 捕捉信号的函数: alarm()、 pause()。 处理信号的函数: signal()、 sigaction()。信号处理的方法主要有两种, 使用 signal()和sigation()函数 使用信号集函数组下面分别介绍这两种处理方...
2018-09-27 18:32:59 1140
原创 Linux 进程间通信(七)消息队列
顾名思义, 消息队列就是一些消息的列表, 用户可以在消息队列中添加消息和读取消息等。从这点上看, 消息队列具有一定的 FIFO 特性, 但是它可以实现消息的随机查询, 比 FIFO具有更大的优势。 同时, 这些消息又是存在于内核中的, 由“队列 ID” 来标识。消息队列的实现包括创建或打开消息队列、 添加消息、 读取消息和控制消息队列 4 种操作,创建或打开消息队列使用的函数是 msgge...
2018-09-25 20:11:46 2600
原创 Linux 进程间通信(六)共享内存
可以说, 共享内存是一种最为高效的进程间通信方式, 因为进程可以直接读写内存, 不需要任何数据的复制。 为了在多个进程间交换信息, 内核专门留出了一块内存区, 这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。 因此, 进程就可以直接读写这一内存区而不需要进行数据的复制, 从而大大提高了效率。 当然, 由于多个进程共享一段内存,因此也需要依靠某种同步机制, 如互斥锁和信号量等(请参考 4...
2018-09-25 19:47:02 2706
原创 Linux 进程间通信(五)IPC的特性
1.标识符和键每个内核中的IPC结构(消息队列、信号量或共享存储段)都用一个非负整数的标识符 (identifier)加以引用。例如,要向一个消息队列发送消息或者从一个消息队列取消息,只需要知道其队列标识符。当一个IPC结构被创建,然后又被删除时,与这种结构相关的标识符连续加1,直至达到一个整型数的最大正值,然后又回转到0。标识符是IPC对象的内部名。为使多个合作进程能够在同一...
2018-09-24 20:47:47 2560
原创 Linux 进程间通信(四)信号量
1 信号量概述信号量和其他IPC不同,并没有在进程之间传送数据,信号量用于多进程在存取共享资源时的同步控制就像交通路口的红路灯一样,当信号量大于0,表示绿灯允许通过,当信号量等于0,表示红灯,必须停下来等待绿灯才能通过。进程间的互斥关系与同步关系存在的根源在于临界资源。临界资源是在同一个时刻只允许有限个(通常只有一个) 进程可以访问(读) 或修改(写)的资源, 通常包括硬件资源(处...
2018-09-24 20:27:52 2977
原创 UNIX高级编程:第14章 高级IO
请移步到:http://note.youdao.com/noteshare?id=d654b94cb2f69813324821b779a79338&sub=42F0C7DC55444E6D8680570BFB0B15CF14.2 非阻塞I/O系统调用分成两类: “低速”系统调用和其他。低速系统调用可能会使进程永远阻塞包括:如果某些文件类型(如读管道、终端设备和网络设...
2018-09-24 14:40:01 227
原创 程序员的技术成长三阶段模型
技术成长三阶段模型为了更好地选择技术方向,我们先来介绍一个模型,我给它取了个名字叫“技术成长三阶段模型”,参照下图1-1所示。图1-1 技术成长三阶段模型我们在一个专业领域内的成长,基本上都会经历三个阶段:初级阶段:专项能力的提升 中级阶段:技能体系的构建 高级阶段:融合创新1.初级阶段:专项能力的提升专项能力提升阶段是初级阶段,针对某项具体任务你必须先具备某些基础能...
2018-09-24 14:37:17 756
原创 Linux的内存I/O映射
内存的I/O映射是将文件某区域的内容映射到进程的虚拟空间的技术通过对文件的内存IO映射,可使用用户对文件的操作转换为对内存的操作,这样不仅使用方便而且提高了存储速度。1.定义存储空间void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);...
2018-09-24 14:28:40 649
原创 Linux记录锁(文件锁)
记录锁(record locking)的功能是:当第一个进程正在读或修改文件的某个部分时,使用记录锁可以阻止其他进程修改同一文件区。“记录”这个词是一种误用,因为UNIX系统内核根本没有使用文件记录这种概念。一个更适合的术语可能是字节范围锁 (byte-range locking),因为它锁定的只是文件中的一个区域(也可能是整个文件)。struct flock { ...
2018-09-24 09:37:04 2248
原创 Linux的五个I/O模型
前面的 fcntl()函数解决了文件的共享问题, 接下来该处理 I/O 复用的情况了。总的来说, I/O 处理的模型有 5 种。 1.阻塞 I/O 模型:在这种模型下, 若所调用的 I/O 函数没有完成相关的功能, 则会使进程挂起, 直到相关数据到达才会返回。 如常见对管道设备、 终端设备和网络设备进行读写时经常会出现这种情况。2.非阻塞 I/O 模型: 在这种模型下, ...
2018-09-23 20:29:18 4709 1
原创 GCC——函数的局部变量的bug
之前写一个代码,出现莫名奇妙的问题,找了半天,结果发现时GCC的BUG问题:在一个程序中,a函数和b函数中定义了相同变量c,a函数给变量赋值了,b函数没赋值结果:在b函数中调用c,其实是调用了a函数的变量c当发现这个问题时,我也感觉莫名其妙,我猜想时编译器的问题,主要是在变量存储方面以下是代码:#include <stdio.h>#include...
2018-09-19 22:21:56 378
原创 UNIX高级编程:第13章 守护进程
请移步到这:http://note.youdao.com/noteshare?id=71c3766867abb8bfbc459c415da88cfb&sub=03BC97B943C94432A6A769D31766E1C313.2 守护进程的特征 注意,大多数守护进程都以超级用户(root)特权运行。所有的守护进程都没有控制终端,其终端名设置为问号。内核守护进程以无控制...
2018-09-18 10:46:55 162
原创 UNIX高级编程:第12章 线程控制
请移步到这里:http://note.youdao.com/noteshare?id=797569d9f0daf39b84a5eed3f5649622&sub=05396B98DAF44650ACC76BE7F90549F0 1 线程取消线程可以通过调用pthread_cancel函数来请求取消同一进程中的其他线程。从编程的角度来讲, 不建议使用这个接口。 笔者对该接口...
2018-09-17 19:03:22 330
原创 Linux线程和fork
参考这个博客就可以了:https://www.cnblogs.com/liyuan989/p/4279210.htmlint pthread_atfork(void (*prepare)(void), void (*parent)(void),void (*child)(void)); //线程创建进程 用pthread_atfork函数最多可以安装3个帮助清理锁的函...
2018-09-17 18:53:44 847
原创 Linux线程中的信号
相比于进程中的信号处理,在线程中更加复杂,线程中的信号处理有如下特点:每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的。这意味着单个线程可以阻止某个信号,但是当某个线程修改了一个信号的处理行为,那么所有线程都会共享这个改变。 进程中的信号是递送到单个线程的。如果一个信号和硬件故障相关,那么该信号一般会被发送到引起该事件的线程中去,而其他的信号会被发送到任意的线程中。1.屏...
2018-09-16 20:11:26 584
原创 UNIX高级编程:第11章 线程
请移步到这里:http://note.youdao.com/noteshare?id=1181ceb083c1dcf4a22415ad2433a3be&sub=FBAFCED22E034E15BE56133783B03C16 对于线程, Linux提供了gettid系统调用来返回其线程ID, 可惜的是glibc并没有将该系统调用封装起来, 再开放出接口来供程序员使用。 如果...
2018-09-16 14:11:10 266
原创 UNIX高级编程:第10章 信号
请移步到这:http://note.youdao.com/noteshare?id=327e4f59a13d06c3edffdca07fcb4d9a&sub=B74C4FC7187341C5B62B4FE8F4B0B7FF10.2 信号概念 core可以用来GDB调试:当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程...
2018-09-16 14:10:01 261
原创 Linux 同步机制:屏障
屏障(barrier)是用户协调多个线程并行工作的同步机制。屏障允许每个线程等待,直到所有的合作线程都到达某一点,然后从该点继续执行。它们允许任意数量的线程等待,直到所有的线程完成处理工作, 而线程不需要退出。所有线程达到屏障后可以接着工作。作用:使用于大量的运算,而个线程间没有干扰 用一些需要等待所有线程完成后,所有线程才能继续进行的应用可以使用pthreadbarrier...
2018-09-16 13:24:26 371
原创 Linux 同步机制:自旋锁
自旋锁(SpinLock):锁的目的是为了保护共享资源,实现线程同步。自旋锁区别于其他锁的地方在于若某线程在未获得锁时将不断的询问(判断)自旋锁保持者是否释放了锁(获取锁操作将自旋在那里,不断地申请获取,直到自旋锁保持者释放了锁),因此比较适用于保持锁时间比较短的情况(CPU一直在空转)。需要注意的是:一个锁只能有一个保持着。 互斥锁(Mutex): 某线程A获得互斥锁,可以访问共享资源,而当...
2018-09-16 10:49:39 337
原创 Linux 同步机制:条件变量
讲条件变量之前,要先讲互斥量(也称互斥锁)1.互斥锁:我把它比作厕所的门,只能有一个人通过 打开这个门使用CPU(或变量),(当然可以有多个厕所门)就上厕所一样,不可能两个人打开一个门,然后一起蹲同一个坑,当一个人检查到门打开着,就会进去,然后关门,另一个人,想上厕所只能一直等门打开假设下面这样的情景:线程1和线程2要读变量BUF,线程3写BUF,线程3没写BUF之前,...
2018-09-16 09:59:23 2151
原创 Linux的pthread_cleanup_push()和pthread_cleanup_pop()函数
注册线程清理函数void pthread_cleanup_push(void (*routine)(void *),void *arg); 触发清理函数void pthread_cleanup_pop(int execute); 注意:触发函数只是做触发作用,就是提前执行清理函数,而不用等到线程结束后才清理即使没有调用这个触发函数,也会进行清理 显然pt...
2018-09-15 16:43:50 975
原创 线程概述
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程包含以下内容:一个指向当前被执行指令的指令指针; 一个栈; 一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值; 一个...
2018-09-15 10:19:24 234
原创 Linux的sigqueue函数
函数sigqueue——发送的信号可以排队int sigqueue(pid_t pid, int sig, const union sigval value);union sigval {int sival_int;void *sival_ptr;};注意:可以阻塞的信号的数量不是无限制的sysconf(_SC_SIGQUEUE_MAX) //可以得到最大值实...
2018-09-14 19:17:49 1016
原创 linux的sigsetjmp和siglongjmp函数
一般函数的跳转函数:int setjmp(jmp_buf env); //设置跳转点void longjmp(jmp_buf env, int val); //起跳专为信号设置的跳转函数:void siglongjmp(sigjmp_buf env, int val); //起跳int sigsetjmp(sigjmp_buf env, int sa...
2018-09-14 13:42:57 1650
原创 linux的sigaction函数
这里要说明的是 sigaction()函数中第 2 和第 3 个参数用到的 sigaction 结构, 这是一个看似非常复杂的结构, 希望读者能够慢慢阅读此段内容。首先给出了 sigaction 的定义, 代码如下:struct sigaction{ void (*sa_handler)(int signo); sigset_t sa_mas...
2018-09-14 10:18:02 838
原创 Linux信号集
信号集的函数:类型:sigset_t 类型/**************************** *功能:把一个信号集的内容清空 *参数:sigset_t *set:是一个信号集,sigset_t的类型一定是可以容纳所有的信号的个数 *返回值:成功返回0,失败返回-1 * ************************/int sigemptyset(sigset_t *...
2018-09-14 09:24:18 250
原创 常见的内存错误及对策
发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到,而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。常见的内存错误,及其对策如下所述。(1)内存分配未成功,却使用了它。编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检查指针是否为...
2018-09-12 22:11:59 746
原创 UNIX高级编程:第9章 进程关系
请移步到这:http://note.youdao.com/noteshare?id=1c335abb23c9b6b5ba97e26a02ceb711&sub=D91CCCB053284DBFB246E33C5E90EFDD
2018-09-12 18:53:00 154
原创 UNIX高级编程:第8章 进程控制
请移步到这:http://note.youdao.com/noteshare?id=b048fc4beccc1b6f57d920f888c3554b&sub=F14CEA327AB24015A0506A2F4780FB24 如何查看一个进程现在的状体呢?#ps -auUSER PID %CPU %MEM VSZ RSS TTY STAT S...
2018-09-12 18:51:56 175
原创 获得进程执行时间
Linux中有很多获得时间信息的方法,但各自有各自的优缺点1.使用time命令# time ./a.out ,,,//这是a.out 执行的内容real 0m0.001suser 0m0.001ssys 0m0.001s优点:可以直接获得进程的各种时间缺点:只能在命令行执行2.使用wait3获得进程的时间相关结构体:struct rusa...
2018-09-12 18:36:10 619
原创 linux文件重命名mv和rename
文件重命名1.把oldname——》newname,且以“newname”为名字的文件不存在方法:用函数:rename(oldname, newname);用命令:mv oldname newname2.把oldname——》newname,且以“newname”为名字的文件存在方法:用函数:rename(oldname, newname);用命令:mv ol...
2018-09-11 19:08:40 4739
原创 文件系统之延迟分配(一)
参考:https://mp.weixin.qq.com/s?__biz=MjM5NjQ4MjYwMQ==&mid=2664612021&idx=1&sn=13929f77df030f970b4c4ccc25a42efd&chksm=bdcefbf38ab972e5314747389a5e51fb8bde6ac5fcb2140ec7334e074519cb2c4d...
2018-09-11 18:44:40 1129
原创 C语言类型转换
1.自动转换 如:1+'2' //字符2转为502.隐式转换 如:int a;char b = a;3.强制转换 如:char a = (int)'2'一:自动转换当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:二:隐式转换(1)相同数据类型之间的转换1.有符号数据类型————》...
2018-09-10 23:13:25 409
原创 C 库函数vprintf
描述C 库函数 int vprintf(const char *format, va_list arg) 使用参数列表发送格式化输出到标准输出 stdout。其实printf和scanf一系列,有很多函数int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int...
2018-09-10 19:39:48 1949
原创 fflush(FILE *stream)函数的用法
int fflush(FILE *stream)在大多数文件都是全缓冲的,意思就是当缓冲区满了才会写到磁盘用这个函数可以马上写磁盘注意:在调用下面这些函数后,应该及时使用fflush写磁盘如:int fputc(int c, FILE *stream);int putc(int c, FILE *stream);int putchar(int c);int puts...
2018-09-10 13:34:35 1108
原创 #include 和#include "filename.h"有什么区别?
正确答案:#include < filename.h>,编译器从标准库路径开始搜索filename.h#include "filename.h",编译器从用户的工作路径开始搜索filename.h. 题目解析:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境变量时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未...
2018-09-09 12:55:40 800
原创 strlen和sizeof的区别
一:当没有指定字符数组的大小时如:char buf [ ] = {"12345\n"};strlen(buf) 等于 6sizeof(buf) 等于 6二:当指定字符数组的大小时如:char buf [BUFSIZE] = {"12345\n"}; //BUFSIZE = 20;strlen(buf) 等于 6sizeof(buf) 等于 20...
2018-09-09 08:30:40 261
转载 Linux下C程序的反汇编
转载:https://blog.csdn.net/u011192270/article/details/50224267Linux下C程序的反汇编前言:本文主要介绍几种反汇编的方法。gccgcc的完整编译过程大致为:预处理->编译->汇编->链接前三个步骤分别对应了-E、-S、-c三个选项。今天我要介绍的第一种方法就是使用-S这个选项。源程序mai...
2018-09-08 15:08:50 716
原创 for(;;)和while(true)的区别
再看JDK源码的时候发现,“死循环”有两种写法:for(;;)和while(true),我就疑问,两者有啥区别,有啥源码中多数是for( ; ; )这种形式的,编译前 编译后 while (1); mov eax,1 test eax,eax ...
2018-09-08 14:52:07 1091
光度立体技术字符识别和缺陷检测
2022-07-30
QT6+CloudCompare显示3D点云
2022-04-27
OCR_Demo3.zip
2021-09-04
QtPluginDemo.zip
2021-03-21
Qt6SerialPort.zip
2021-02-04
Qt实现二维码的编解码
2020-11-07
halcon19可用dll.zip
2020-08-03
qthalcon3d.zip
2020-07-04
draw_qwidget.zip
2019-12-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人