自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 我的CSDN 目录,作为博主在CSDN上发布的文章类型导读

此篇文章介绍我的整个CSDN目录,也就是介绍我在CSDN会发布的博客的目录,如果觉得找不到博主的文章从哪里开始的,请从这篇文章开始。linux、C/C++各种知识记录。

2023-02-28 20:51:49 1563

原创 C语言_常量_变量_变量本质_变量的存储类别_auto_static_register_extern

auto:函数中的局部变量,动态的分配存储空间,数据存储在动态存储区中,在调用该函数时,系统会给他们分配存储空间,在函数调用结束后自动释放这些空间,即修饰一个局部变量为自动的,auto可以省略,因为局部变量的存储方式默认为自动的。register:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫寄存器变量,只有局部自动变量和形参可以作为寄存器变量。static:静态局部变量,属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放,即始终保持变量运算后的值。

2023-05-26 22:56:05 1004 1

原创 C语言_数据类型[详细分析]

十六进制整型,以Ox开头。一些基本数据类型能够被 signed(有符号对应int:表示有负数、0、正数)、unsigned(无符号对于int,只有正数和0)修饰. 1、void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。short int:短整型,占两个字节,取值范围-32768 — +32767。unsigned int:无符号基本整型,取值约范围0—42亿。long int: 长整型,4个字节,取值范围约在-21亿 — +21亿。是固定内存大小的别名。

2023-05-25 15:57:35 1540

原创 C语言_一些库函数使用stdio.h/string.h/math.h/time.h/ctype.h/stdlib.h/conio.h

之后调用longjmp(),longjmp()的第二个参数即为setjmp()的返回值。功能:函数返回字符串str1中紧接“标记”的部分的指针, 字符串str2是作为标记的分隔符。改变fDoule指向的空间的大小,其大小设置为整型,然后将改变后的内存空间的地址返回赋值给ilnt整型指针。功能:函数在buffer指向的数组的count个字符的字符串里查找ch 首次出现的位置。如果strcoll() 处理字符串str1 和旧的字符串str2, 返回值和strcmp()的处理结果一样。返回处理完成的字符串。

2023-05-25 15:24:55 4396 1

原创 C语言_VS系列编译器写C语言或C++代码产生的一些错误与警告的解决方法(VS2010/VS2019)

1、error C2664: “puts”: 不能将参数 1 从“char [2][10]”转换为“const char *”2.16.1.示例1:: “初始化”: 无法从“char [2][10]”转换为“char *”error C2440: “初始化”: 无法从“char [2][10]”转换为“char *”1、error C2040: “==”:“char [10]”与“int”的间接寻址级别不同。warning C4244: “=”: 从“float”转换到“int”,可能丢失数据。

2023-05-22 19:40:28 3465

原创 C语言_关键字_标识符简介

1.14.for语法:for构造一个由4部分组成的循环:initialization初始化, 可以由0个或更多的由逗号分开的初始化语句构成;test-condition判断条件,如果满足该语句循环继续执行;increment 增量, 可以由0个或更多的由逗号分开的增量语句构成;statement-list语句列表,由0个或更多的语句构成,当循环条件成立时他们被执行。例如:i < 10;j < k;

2023-05-21 14:19:36 1529

原创 C语言_用VS2019写第一个C语言或C++程序

本次来分享用VS2019来写C语言或C++程序,也是补充上一篇的知识,话不多说,开始上菜:  选择创建新项目,若是要打开VS2019的项目,只需要找到你项目中的.sln文件,双击打开它,就可以了。  然后点击下一步。  在选择创建。  到这步,一个简单的工程就算创建好了,使用快捷键ctrl+f5,就能运行该工程。  运行成功后:  鼠标右键点击源文件,选择添加–>新建项  若是没有找到解决方案资源管理器,请看下图:  创

2023-05-20 23:54:08 719

原创 C语言_简述、特点、常用编译器,VS2019下载及安装,VS2010/VS2019写第一个C语言程序

C语言是高级语言,既然有高级语言,那肯定有低级语言,最低级的语言就是机器语言,就是0和1组成的语言,程序员使用起来很麻烦,所以慢慢出现了更加简便的语言,使人们使用起来更加方便。推荐用微软的编译器,就是VS系列,从最开始的VC++6.0一直到VS2019,期间有vs2010/2013等,目前我这边所用的编译器就是vs2010。C语言文件的后缀名是.c,C++语言的文件后缀名是.cpp,编译后的二进制文件.obj,就是目标文件,可执行文件后缀名是.exe,这些是基础的知识。VS2019写C语言程序

2023-05-09 23:47:06 2323

原创 linux_UDP通信_sendto函数_recvfrom函数

sendto函数 recvfrom函数 传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议。省去了三次握手的过程,通信速度可以大大提高,但与之伴随的通信的稳定性和正确率便得不到保证。//NULL:不关心对端信息。与TCP类似的,UDP也有可能出现缓冲区被填满后,再接收数据时丢包的现象。dest_addr:指向 struct sockaddr 结构的指针(包含远程主机的 IP 地址和端口数据,是传入参数)。由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,保证通讯可

2023-05-08 21:29:15 2419

原创 linux_socket网络套接字函数(TCP通信)-socket函数-bind函数-listen函数-accept函数-connect函数-send函数-recv函数

socket函数 bind函数 listen函数 accept函数 connect函数 send函数 recv函数 首先将整个结构体清零,然后设置地址类型为AF_INET,网络地址为INADDR_ANY,这个宏表示本地的任意IP地址,因为服务器可能有多个网卡,每个网卡也可能绑定多个IP地址,这样设置可以在所有的IP地址上监听,直到与某个客户端建立了连接时才确定下来到底用哪个IP地址,端口号为6666。客户端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是

2023-05-07 21:35:42 1677

原创 linux_网络通信-套接字通信socket-网络字节序-IP地址转换函数-inet_pton函数-htonl函数-htons函数-ntohl函数-ntohs函数

套接字概念 例如UDP段格式,地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8),则地址0是0x03,地址1是0xe8,也就是先发0x03,再发0xe8,这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址存0xe8。例如UDP段格式,地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8),则地址0是0x03,地址1是0xe8,也就是先发0x03,再发0xe8,这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址存0xe8。在网络通信中,套接字一定是成对出现的

2023-05-06 19:25:00 2707

原创 linux_进程锁与文件锁-pthread_mutexattr_init函数-pthread_mutexattr_setpshared函数

进程间也可以使用互斥锁 pthread_mutexattr_init函数 初始化一个mutex属性对象 pthread_mutexattr_setpshared函数 修改mutex属性 pthread_mutexattr_destroy函数 销毁mutex属性对象 (而非销毁锁) 但应在pthread_mutex_init初始化之前,修改其属性为进程间共享。线程锁取值:PTHREAD_PROCESS_PRIVATE (mutex的默认属性即为线程锁,进程间私有)锁的类型:F_RDLCK 、F_WRLCK 、

2023-05-05 18:43:46 1748

原创 linux_信号量函数系列-信号量实现生产者消费者模型-sem_init函数-sem_wait函数-sem_post函数-sem_trywait函数

sem_init函数-sem_wait函数-sem_post函数-sem_trywait函数 定义两个信号量:S满 = 0, S空 = 1 (S满代表满格的信号量,S空表示空格的信号量,程序起始,格子一定为空)。sem_post: 将信号量++,同时唤醒阻塞在信号量上的线程 (类比pthread_mutex_unlock);但,由于sem_t的实现对用户隐藏,所以所谓的++、–操作只能通过函数来实现,而不能直接++、–符号。sem_wait: 1. 信号量大于0,则信号量-- (类比pthread_mut

2023-05-04 17:44:34 4060

原创 linux_条件变量_pthread_cond_wait函数_pthread_cond_timedwait函数_pthread_cond_signal函数_生产者消费者模型

pthread_cond_t类型 用于定义条件变量 pthread_cond_init函数 pthread_cond_wait函数 该系列函数所有的返回值,返回非0的时候 生产者消费者条件变量模型 都可以通过strerror函数来打印错误信息 如直接使用mutex,除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果汇聚(链表)中没有数据,消费者之间竞争互斥锁是无意义的。 当被唤醒,pthread_cond_wait函数返回时,解除阻塞并重新申请获取互斥锁pthread_mutex_l

2023-05-03 11:27:15 804

原创 linux_线程读写锁_pthread_rwlock_rdlock函数_pthread_rwlock_wrlock函数_pthread_rwlock_tryrdlock函数_pthread_rwloc

pthread_rwlock_tryrdlock函数 pthread_rwlock_trywrlock函数 读写锁是“读模式加锁”时, 既有试图以写模式加锁的线程,也有试图以读模式加锁的线程。那么读写锁会阻塞随后的读模式锁请求。今天来向大家分享linux的另一种锁:读写锁,与互斥量锁类似,但读写锁允许更高的并行性。读写锁也叫共享-独占锁。 读写锁是“读模式加锁”时, 如果线程以读模式对其加锁会成功;3个线程不定时 “写” 全局资源,5个线程不定时 “读” 同一全局资源。 读写锁是“写模式加锁”时, 解锁前,

2023-05-02 09:04:50 1161

原创 linux_线程锁mutex(互斥量)_线程同步_死锁现象_pthread_mutex_lock函数_pthread_mutex_unlock函数_死锁现象

线程锁,pthread_mutex_lock函数 pthread_mutex_unlock函数 当T1再次获得cpu继续 从失去cpu的位置向后写入1,当执行结束,内存中的100字节,既不是全1,也不是全0。4、main 中加n= 10 将n在while中-- 这时,主线程输出10次后退出,调用pthread_cancel()将子线程退出,销毁锁。以上3点中,前两点不能改变,欲提高效率,传递数据,资源必须共享。unlock主动解锁函数,同时将阻塞在该锁上的所有线程全部唤醒,至于哪个线程先被唤醒,取决于优先

2023-05-01 16:57:40 1703

原创 linux_设置线程属性-pthread_attr_t结构体-设置线程分离态-修改线程栈的大小-NPTL

pthread_attr_t结构体 pthread_attr_init函数 pthread_attr_destroy函数 pthread_attr_setdetachstate函数 pthread_attr_getdetachstate函数 pthread_cond_timedwait函数 pthread_attr_setstack函数 pthread_attr_getstack函数 pthread_attr_setstacksize函数 pthread_attr_getstacksize函数 默认的属性为

2023-04-30 19:02:49 1477

原创 linux_线程分离pthread_detach函数-线程取消pthread_cancel函数-线程相等pthread_equal函数

pthread_detach函数 ②不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL错误。也就是说,如果已经对一个线程调用了pthread_detach就不能再调用pthread_join了。但是线程也可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。也就是说,如果已经对一个线程调用了pthread_detach就不能再调用pthread_join了。一般情况下,线程终止后,其终止状态一直保留到其它线程调用pthre

2023-04-30 10:17:58 1634

原创 linux_线程基础函数-pthread_self函数-pthread_create函数-pthread_exit函数-pthread_join函数

在一个线程中调用pthread_create()创建新的线程后,当前线程从pthread_create()返回继续往下执行,而新的线程所执行的代码由我们传给pthread_create的函数指针start_routine决定。线程id的类型是thread_t,它只在当前进程中保证是唯一的,在不同的系统中thread_t这个类型有不同的实现,它可能是一个整数值,也可能是一个结构体,也可能是一个地址,所以不能简单地当成整数用printf打印,调用pthread_self(3)可以获得当前线程的id。

2023-04-29 18:32:31 3389

原创 linux_线程概念-内核线程实现原理-线程共享资源-线程优缺点

什么是线程,LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间。Linux下: 线程:最小的执行单位进程:最小分配资源单位,可看成是只有一个线程的进程。 线程共享资源 1、文件描述符表 2、每种信号的处理方式 3、当前工作目录 线程非共享资源 1、线程id 2、处理器现场和栈指针(内核栈) 3、独立的栈空间(用户空间栈)

2023-04-28 20:42:21 817

原创 linux_进程学习-ttyname函数-getpgrp-getpgid-setpgid函数-getsid-setsid函数-守护进程-linux会话

ttyname函数-getpgrp-getpgid-setpgid函数-getsid-setsid函数-守护进程-linux会话 参数a表示不仅列当前用户的进程,也列出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控制终端的进程,参数j表示列出与作业控制相关的信息。Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。printf(“----子进程组ID被改变后的组 ID == %d\n”,getpgid(0));pr

2023-04-24 00:20:58 1147

原创 linux_信号_sigqueue函数发送信号传参_sigaction函数捕捉信号传参_中断系统调用

当注册信号捕捉函数,希望获取更多信号相关信息,不应使用sa_handler而应该使用sa_sigaction。siginfo_t是一个成员十分丰富的结构体类型,可以携带各种与信号相关的数据。如:捕捉到信号后,在执行捕捉函数期间,不希望自动阻塞该信号,可将sa_flags设置为SA_NODEFER,除非sa_mask中包含该信号。可修改sa_flags参数来设置被信号中断后系统调用是否重启。慢速系统调用被中断的相关行为,实际上就是pause的行为: 如,read。oldact:传出参数,旧的处理方式。

2023-04-22 22:41:03 800

原创 linux_SIGCHLD信号-子进程回收

-1 回收指定进程组内的任意子进程 可以和kill命令一起使用,例如:kill -9 -进程组ID。printf(“子进程 %d 退出 %d\n”, pid, WEXITSTATUS(status));printf(“子进程 %d 取消 信号 %d\n”, pid, WTERMSIG(status));0 回收指定ID的子进程,回收指定子进程时,只要该子进程结束,就可回收,回收时间>=子进程结束时间。1.子进程继承了父进程的信号屏蔽字和信号处理动作,但子进程没有继承未决信号集spending。

2023-04-22 21:28:01 797

原创 linux_时序竞态-pause函数-sigsuspend函数-异步I/O-可重入函数-不可重入函数

时序竞态:由于进程之间执行的顺序,pause函数 sigsuspend函数 原子操作:cpu在执行这个函数就会把他执行完,不会停止。为什么会有时序竞态的问题产生,是因为cpu在执行进程的时候,一个进程只执行一个时间片段,在调用alarm函数后,CPU去执行别的进程了,当执行别的进程的时间大于定时的时间后,会发生什么问题,全局变量异步I/O,可重入函数,不能使用malloc、free等,不可重入函数,函数内不能含有全局变量及static变量,EINTR:被一个信号中断。

2023-04-22 00:09:43 933

原创 linux_信号捕捉-signal函数-sigaction函数-sigaction结构体

1、进程正常运行时,默认PCB中有一个信号屏蔽字,假定为set,它决定了进程自动屏蔽哪些信号。当注册了某个信号捕捉函数,捕捉到该信号以后,要调用该函数。sa_mask: 调用信号处理函数时,所要屏蔽的信号集合(信号屏蔽字)。sa_sigaction:当sa_flags被指定为SA_SIGINFO标志时,使用该信号处理程序。//默认属性 信号捕捉函数执行期间,自动屏蔽本信号。//屏蔽ctrl+c信号。//捕捉ctrl+c信号,在当前进程收到ctrl+c信号时执行do_sig函数。

2023-04-21 00:29:00 517

原创 linux_信号_sigemptyset函数-sigfillset函数-sigaddset函数-sigdelset函数-sigismember函数-sigprocmask函数-sigpending函数

C语言代码打印未决信号集,信号屏蔽字,sigset_t类型定义: typedef unsigned long sigset_t; sigset_t类型的本质是位图。 sigprocmask函数详解 1.内核对信号的处理当信号产生后,未决信号集中描述该信号的位立刻翻转为1,内核通过读取未决信号集来判断信号是否应被处理。但信号屏蔽字集合mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。2.信号集设定。 sigfillset函数-sigaddset函数

2023-04-20 22:45:45 1052

原创 linux_设置定时器(C语言)-alarm函数-time命令-settimer函数

返回0或剩余的秒数,此时剩余的秒数是:距离第一次调用alarm函数后第二次调用alarm函数,上一次设定的seconds定时没有执行完的时间。假设你上一次定时5s,但是你的程序执行2s后又再次调用该函数,则本次调用的返回值就是上一次定时剩余的时间3s。③ 运行时计时(用户+内核):ITIMER_PROF → 27)SIGPROF 计算占用cpu及执行系统调用的时间。程序运行的瓶颈在于IO,优化程序,首选优化IO(标准输入输出屏幕)。常用:取消定时器alarm(0),返回旧闹钟余下秒数。

2023-04-20 00:38:14 1850

原创 linux_信号-终端按键信号-硬件异常信号-kill函数-raise函数-abort函数

权限保护:super用户(root)可以发送信号给任意用户,普通用户是不能向系统用户发送信号的。kill -SIGKILL 【PID-进程ID号】 #向当前进程发送了9号信号(SIGKILL),杀死当前进程。printf(“我是子进程 %d, ppid = %d\n”, getpid(), getppid());除0操作 → 8) SIGFPE (浮点数例外) “F” -----float 浮点数。失败:-1 (ID非法,信号非法,普通用户杀init进程等权级问题),设置errno。

2023-04-19 23:18:57 875

原创 linux_信号概念、事件、状态、常见信号解释、信号屏蔽字、未决信号集

在Linux内核的进程控制块PCB是一个结构体,task_struct, 除了包含进程id,状态,工作目录,用户id,组id,文件描述符表等,还包含了信号相关的信息,主要指阻塞信号集和未决信号集。当进程A给进程B发送信号时,进程B收到信号之前是执行自己的代码,收到进程A的信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行自己的代码。其实就是你执行ctrl+c后,相当于产生了一个信号,你所在的终端进程就将这个信号发给你运行的进程,而这个信号就是能杀死你进程的信号。

2023-04-19 22:16:09 953

原创 linux_使用共享存储映射区进行无血缘进程通信-mmap函数-munmap函数

本篇文章是对共享存储映射区的补充,也是一个例子代码,大家可以借鉴学习。以上就是本次的分享了,希望能对大家有所帮助。此博主在CSDN发布的文章目录:【1.进程a-先执行-写数据。2.进程b-后执行-读数据。

2023-04-18 23:59:08 261

原创 linux_共享存储映射区-mmap函数-munmap函数-进程通信-strace命令

共享存储映射I/O就是使一个磁盘文件与存储空间中的一个缓冲区相映射,当从缓冲区中取数据,就相当于读文件中的相应字节;mmap函数 函数作用:创建的映射区首地址。头文件:#include 函数原型:void *mmap(void *adr 函数参数:addr: 建立映射区的首地址,由Linux内核指定。使用时,直接传递NULL length: 欲创建映射区的大小 prot 映射区权限PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE flags:标志位

2023-04-18 23:38:06 999

原创 VS2019使用OpenCppCoverage插件生成覆盖率报告的方法及该插件的一些设置【详细图解】

OpenCppCoverage插件说明 OpenCppCoverage插件安装方法 下载OpenCppCoverage插件,运行插件,安装到VS2019中 添加OpenCppCoverage.exe的路径到系统环境变量中 第一步:找到OpenCppCoverage.exe的安装路径 OpenCppCoverage插件使用 第一步:打开VS2019,选择工具,选择Run OpenCoverage 第二步:查看代码覆盖率 OpenCppCoverage插件生成覆盖率报告 使用界面OpenCppCoverage

2023-04-18 00:38:29 3190 1

原创 linux_FIFO命名管道-mkfifo函数-进程通信

FIFO常被称为命名管道,以区分管道(pipe)。管道(pipe)只能用于“有血缘关系”的进程间。但通过FIFO,不相关的进程也能交换数据,也就是无血缘间的进程进行通信。一旦使用mkfifo创建了一个FIFO,就可以使用open打开它,常见的文件I/O函数都可用于fifo。如:close、read、write、unlink等。//注意创建管道文件需要一方掌握读端,一方掌握写端,才能正常读写。1.FIFO-mkfifo函数。pathname:文件名。

2023-04-17 22:08:04 983

原创 linux_管道学习-pipe函数-管道的读写-fpathconf函数

管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。int pipe(int pipefd[2]); 创建一个管道。① 读管道: 1. 管道中有数据,read返回实际读到的字节数。2. 管道中无数据:管道写端被全部关闭,read返回0 (好像读到文件结尾) 写端没有全部被关闭,read阻塞等待(不久的将来可能有数据递达,此时会让出cpu) 写管道: 管道读端全部被关闭, 进程异常终止(也可使用捕捉SIGPIPE信号,使进程不终止) 管道读端没有全部

2023-04-17 20:50:34 1299

原创 linux_何为IPC-进程间常用的通信方式

任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制就称为。Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。这些方法是如何通信的,在接下来的分享中会逐一介绍到,各位网友敬请期待吧。随着计算机的蓬勃发展,一些方法由于自身设计缺陷被淘汰或者弃用。在进程间完成数据传递需要借助操作系统提供特殊的方法,

2023-04-15 15:16:40 382

原创 linux_回收子进程(何为孤儿进程、僵尸进程、wait函数、waitpid函数)

孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,此时子进程的父进程就成为init进程,该子进程就相当于被init进程领养。僵尸进程: 进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。wait函数作用:① 阻塞等待子进程退出 借助宏函数来进一步判断进程终止的具体原因 waitpid函数作用 指定pid进程清理,可以不阻塞。参数pid: > 0 回收指定ID的子进程,回收指定子进程时,只要该子进程结束,就可回收,回收时间>=子进程结束时间。

2023-04-14 23:33:42 926

原创 linux_exec函数族-execl函数-execlp函数-execle函数-execv函数-execvp函数-execve函数

execl函数 execlp函数 execle函数 execv函数 execvp函数 execve函数 exec函数一旦调用成功即执行新的程序,不返回。只有失败才返回,错误值-1。所以通常我们直接在exec函数调用后直接调用perror()和exit(),无需if判断。 l (list) 命令行参数列表 p (path) 搜索file时使用path变量 v (vector) 使用命令行参数数组 e (environment) 使用环境变量数组,不使用进程原有的环境变量,设置新加载程序运行的环境变量 函数作用

2023-04-11 22:30:14 903

原创 linux_进程类相关学习-fork函数-getpid函数-getppid函数-getuid函数-geteuid函数-getgid函数-getegid函数-进程之间共享数据-进程gdb调试

fork函数 创建一个子进程 getpid函数 获取当前进程ID getppid函数 获取当前进程的父进程ID getuid函数 获取当前进程实际用户 geteuid函数 获取当前进程有效用户ID getgid函数 获取当前进程使用用户组ID getegid函数 获取当前进程有效用户组ID 进程之间共享数据-进程gdb调试 父子进程共享:1. 文件描述符(打开文件的结构体) 2. mmap建立的映射区 (后续再分享) gdb调试的时候 注意,区分一个函数是“系统函数”还是“库函数”依据: ①是否访问内核数

2023-04-10 22:53:29 881

原创 linux_环境变量-C语言代码打印环境变量-getenv函数-setenv函数-unsetenv函数

linux环境变量 environ PATH SHELL 通常是/bin/bash。 getenv函数 函数作用:获取环境变量值 头文件:#include setenv函数 函数参数: name:环境变量的键 value:环境变量的值overwrite: unsetenv函数 函数作用: 删除环境变量name的定义 函数参数: name:环境变量的键 返回值: 成功:0;失败:-1 val = getenv(name);//获取name环境变量值 printf("1 %s = %s

2023-04-10 21:48:31 812

原创 linux_进程基础概念(程序、进程、并发、单道程序设计、多道程序设计、CPU和MMU、进程控制块PCB、进程状态)

程序 是指编译好 进程 活跃的程序 并发:一个时间段中有多个进程 单道程序设计:程一个一个排 多道程序设计:多个进程轮流使用CPU (分时复用CPU资源) CPU和MMU:是内存管理单元,有时 进程控制块PCB:维护进程相关的信息 进程状态:状态有5种。分别是初始态,就绪态,运行态,挂起态与终止态。cpu一般为纳秒级,1s约可以执行10亿条指令。1s = 1000ms, 1ms = 1000us, 1us = 1000ns即1s=1000000000ns也就是说,多道程序设计在人眼中是并行,但是对于

2023-04-08 23:24:41 290

linux基础学习+进程+信号+线程+线程锁+进程锁+信号量+网络socket套接字编程

本资源是博主的一部分学习资料,包含: ①Linux基础学习:文件类命令、压缩命令、进程命令、服务器搭建、用户管理、vim学习、gcc/g++编译、linux静态库/动态库、gdb学习、makefile基础学习、C语言文件操作类函数、C语言目录操作函数等; ②linux系统编程学习:C语言进程、信号、线程、线程锁、进程锁、信号量; ③linux网络编程学习:tcp编程、udp编程(socket套接字编程); ④linux-shell编程学习; 资源几乎包含了博主的整个linux学习的资料,是根据网络课程、网络资料、自写程序、书籍资料等渠道收集整理的,希望对大家有所帮助。

2023-05-04

MFC+VS2010+计算器

本资源是自写的一个计算器小工具,是用VS2010的MFC写界面程序。 计算器包含以下功能: ①实现普通的加减乘除计算; ②实现平方计算; ③实现多表达式计算,例如:(1+5)*8/4; ④实现根号计算; ⑤实现阶乘计算; ⑥实现幂计算; ⑦实现取余计算。 MFC简介(来自百度百科): MFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

2023-05-04

C/C++ 自动生成cmake+测试log打印+文件小工具-遍历文件夹

三个小工具都是博主在学测试的时候用C++写的,写得可能有些乱,但是还是很有用的,其中包含: ①自动生成cmake小工具 ②测试log打印 ③遍历文件夹 代码仅供学习使用,下载下来若是不懂,可以私信博主,博主看到私信后会回答的,若是后期有新的发现,会继续更新。

2023-05-04

VS2019+catch框架+自动生成简单测试用例工具

该资源包含catch框架和博主自写的一个自动生成简单测试用例的工具,用起来简单,大家可以下载来学习使用,自写自动生成简单测试用例的工具包含有源码,可以根据此源码在添加自己的需求。 catch框架简介: 在catch的文档指出,对于C++单元测试框架,目前已经有 Google Test, Boost.Test, CppUnit, Cute, 以及其它的一些,那么catch有什么优势呢,文档主要列举了以下这些优势: ①简单易用:只需要下载catch.hpp,包含到你的工程就可以了; ②不依赖外部库:只要你可以编译C++11,有C++的标准库就可以了; ③测试case可以分割为sections: 每个setcion都是独立的运行单元; ③提供了BDD式的测试模式:可以使用Given-When-Then section来做BDD测试; ④只用一个核心的assertion宏来做比较。用标准的C++运算符来做比较,但是可以分解表达式,记录表达式等号左侧和右侧的值; ⑤可以用任何形式的字符串给测试命名,不用担心名字是否合法。

2023-05-04

linux工程样例框架-C/C++-makefile框架-CMakefile框架

本资源包含两个样例框架makefile+CMakefile: 已经写好了初始化的makefile和CMakeLists.txt文件,只需要在框架的基础上添加自己的需求就可以了,但是最基础的make和cmake的语法还是需要懂的,才能写好框架,提高自己项目的效率。 希望这两个小框架能对大家有用,后续还会继续更新框架,争取让框架更加的完美。

2023-05-04

VS2019-OpenCppCoverage插件-覆盖率报告生成-详细使用文档说明

文档包含OpenCppCoverage插件的插件,OpenCppCoverage详细使用文档说明,主要是用来做VS2019的代码覆盖率的,适合UT单元测试, OpenCppCoverage说明: 1、使用OpenCppCoverag可以查看整个C/C++文件的覆盖率和覆盖行数以及未覆盖的行数; 2、在VS2019中运行该插件,会将已覆盖代码填充绿色,未覆盖代码填充红色; 3、可以使用该工具生成可视化的.hml覆盖率报告。 文档目录: 1.OpenCppCoverage插件说明 2.OpenCppCoverage插件安装方法 3.OpenCppCoverage插件使用 4.OpenCppCoverage插件生成覆盖率报告 4.1.使用界面OpenCppCoverage Settings来进行设置 4.2.使用opencppcoverage命令生成覆盖率报告 5.过滤掉不想生成的源代码文件

2023-04-01

空空如也

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

TA关注的人

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