- 博客(64)
- 收藏
- 关注

原创 我的优快云 目录,作为博主在优快云上发布的文章类型导读
此篇文章介绍我的整个优快云目录,也就是介绍我在优快云会发布的博客的目录,如果觉得找不到博主的文章从哪里开始的,请从这篇文章开始。linux、C/C++各种知识记录。
2023-02-28 20:51:49
1681
原创 C语言_常量_变量_变量本质_变量的存储类别_auto_static_register_extern
auto:函数中的局部变量,动态的分配存储空间,数据存储在动态存储区中,在调用该函数时,系统会给他们分配存储空间,在函数调用结束后自动释放这些空间,即修饰一个局部变量为自动的,auto可以省略,因为局部变量的存储方式默认为自动的。register:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫寄存器变量,只有局部自动变量和形参可以作为寄存器变量。static:静态局部变量,属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放,即始终保持变量运算后的值。
2023-05-26 22:56:05
1047
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
1622
原创 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
4453
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
3741
原创 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
1597
原创 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
2446
原创 linux_UDP通信_sendto函数_recvfrom函数
sendto函数 recvfrom函数 传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议。省去了三次握手的过程,通信速度可以大大提高,但与之伴随的通信的稳定性和正确率便得不到保证。//NULL:不关心对端信息。与TCP类似的,UDP也有可能出现缓冲区被填满后,再接收数据时丢包的现象。dest_addr:指向 struct sockaddr 结构的指针(包含远程主机的 IP 地址和端口数据,是传入参数)。由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,保证通讯可
2023-05-08 21:29:15
2936
原创 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
1792
原创 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
2860
原创 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
2070
原创 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
4679
原创 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
900
原创 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
1678
原创 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
1853
原创 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
1636
原创 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
1808
原创 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
3801
原创 linux_线程概念-内核线程实现原理-线程共享资源-线程优缺点
什么是线程,LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间。Linux下: 线程:最小的执行单位进程:最小分配资源单位,可看成是只有一个线程的进程。 线程共享资源 1、文件描述符表 2、每种信号的处理方式 3、当前工作目录 线程非共享资源 1、线程id 2、处理器现场和栈指针(内核栈) 3、独立的栈空间(用户空间栈)
2023-04-28 20:42:21
858
原创 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
1260
原创 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
871
原创 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
849
原创 linux_时序竞态-pause函数-sigsuspend函数-异步I/O-可重入函数-不可重入函数
时序竞态:由于进程之间执行的顺序,pause函数 sigsuspend函数 原子操作:cpu在执行这个函数就会把他执行完,不会停止。为什么会有时序竞态的问题产生,是因为cpu在执行进程的时候,一个进程只执行一个时间片段,在调用alarm函数后,CPU去执行别的进程了,当执行别的进程的时间大于定时的时间后,会发生什么问题,全局变量异步I/O,可重入函数,不能使用malloc、free等,不可重入函数,函数内不能含有全局变量及static变量,EINTR:被一个信号中断。
2023-04-22 00:09:43
998
原创 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
565
原创 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
1222
原创 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
2033
原创 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
931
原创 linux_信号概念、事件、状态、常见信号解释、信号屏蔽字、未决信号集
在Linux内核的进程控制块PCB是一个结构体,task_struct, 除了包含进程id,状态,工作目录,用户id,组id,文件描述符表等,还包含了信号相关的信息,主要指阻塞信号集和未决信号集。当进程A给进程B发送信号时,进程B收到信号之前是执行自己的代码,收到进程A的信号后,不管执行到程序的什么位置,都要暂停运行,去处理信号,处理完毕再继续执行自己的代码。其实就是你执行ctrl+c后,相当于产生了一个信号,你所在的终端进程就将这个信号发给你运行的进程,而这个信号就是能杀死你进程的信号。
2023-04-19 22:16:09
1000
原创 linux_使用共享存储映射区进行无血缘进程通信-mmap函数-munmap函数
本篇文章是对共享存储映射区的补充,也是一个例子代码,大家可以借鉴学习。以上就是本次的分享了,希望能对大家有所帮助。此博主在优快云发布的文章目录:【1.进程a-先执行-写数据。2.进程b-后执行-读数据。
2023-04-18 23:59:08
287
原创 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
1068
原创 VS2019使用OpenCppCoverage插件生成覆盖率报告的方法及该插件的一些设置【详细图解】
OpenCppCoverage插件说明 OpenCppCoverage插件安装方法 下载OpenCppCoverage插件,运行插件,安装到VS2019中 添加OpenCppCoverage.exe的路径到系统环境变量中 第一步:找到OpenCppCoverage.exe的安装路径 OpenCppCoverage插件使用 第一步:打开VS2019,选择工具,选择Run OpenCoverage 第二步:查看代码覆盖率 OpenCppCoverage插件生成覆盖率报告 使用界面OpenCppCoverage
2023-04-18 00:38:29
3646
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
1016
原创 linux_管道学习-pipe函数-管道的读写-fpathconf函数
管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。int pipe(int pipefd[2]); 创建一个管道。① 读管道: 1. 管道中有数据,read返回实际读到的字节数。2. 管道中无数据:管道写端被全部关闭,read返回0 (好像读到文件结尾) 写端没有全部被关闭,read阻塞等待(不久的将来可能有数据递达,此时会让出cpu) 写管道: 管道读端全部被关闭, 进程异常终止(也可使用捕捉SIGPIPE信号,使进程不终止) 管道读端没有全部
2023-04-17 20:50:34
1441
原创 linux_何为IPC-进程间常用的通信方式
任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制就称为。Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。这些方法是如何通信的,在接下来的分享中会逐一介绍到,各位网友敬请期待吧。随着计算机的蓬勃发展,一些方法由于自身设计缺陷被淘汰或者弃用。在进程间完成数据传递需要借助操作系统提供特殊的方法,
2023-04-15 15:16:40
398
原创 linux_回收子进程(何为孤儿进程、僵尸进程、wait函数、waitpid函数)
孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,此时子进程的父进程就成为init进程,该子进程就相当于被init进程领养。僵尸进程: 进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。wait函数作用:① 阻塞等待子进程退出 借助宏函数来进一步判断进程终止的具体原因 waitpid函数作用 指定pid进程清理,可以不阻塞。参数pid: > 0 回收指定ID的子进程,回收指定子进程时,只要该子进程结束,就可回收,回收时间>=子进程结束时间。
2023-04-14 23:33:42
1015
原创 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
999
原创 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
980
原创 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
886
原创 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
320
原创 linux通过C语言代码打印系统环境变量-environ[方法超级简单]
以上就是本次分享了,欢迎各位网友关注博主一起交流讨论。此博主在优快云发布的文章目录:【
2023-04-01 23:14:39
428
linux基础学习+进程+信号+线程+线程锁+进程锁+信号量+网络socket套接字编程
2023-05-04
MFC+VS2010+计算器
2023-05-04
C/C++ 自动生成cmake+测试log打印+文件小工具-遍历文件夹
2023-05-04
VS2019+catch框架+自动生成简单测试用例工具
2023-05-04
linux工程样例框架-C/C++-makefile框架-CMakefile框架
2023-05-04
VS2019-OpenCppCoverage插件-覆盖率报告生成-详细使用文档说明
2023-04-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人