自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 静态库和动态库的区别

由于动态库的内存是共享的,一个动态库可以被多个应用程序共同使用,从而节省了系统资源。这也意味着,如果多个应用程序都使用了同一个动态库,它们实际上共享同一块动态库的内存,而不是每个应用程序都有自己单独的一份。相反,动态库在运行时才被加载到内存中。当可执行文件需要使用动态库中的函数或资源时,操作系统动态加载器会将动态库加载到内存中,并将其符号表与可执行文件进行关联。这样,可执行文件就能够调用动态库中的函数了。总结起来,静态库与可执行文件一起加载到内存中,而动态库在需要时才被加载,并且可以被多个应用程序共享。

2023-08-13 17:10:12 167 1

原创 条件变量和信号量的区别及应用场景

当一个线程发现共享资源不满足某个条件时,它可以通过调用pthread_cond_wait函数阻塞自己,并释放相应的互斥锁。当另一个线程修改了共享资源,并调用pthread_cond_signal或pthread_cond_broadcast函数时,阻塞的线程将被唤醒,并重新获取互斥锁,继续执行。综上所述,信号量适用于多进程环境下的同步问题,而条件变量适用于多线程环境下的同步问题。如果需要在多进程之间共享资源,或者需要控制多个进程之间的访问顺序,可以选择信号量。信号量是一种计数器,用于保护共享资源的访问。

2023-04-11 20:34:05 1853

原创 Linux管道读写阻塞问题解决方案:使用fcntl函数

然而,管道的读写操作有时会阻塞(停止)进程,直到另一个进程写入或读取数据。这意味着,如果一个进程试图从管道读取数据,而没有其他进程向管道写入数据,该进程将一直等待。同样,如果一个进程试图将数据写入管道,而没有其他进程从管道中读取数据,该进程也会一直等待。但是,可以将管道的读取和写入端设置为非阻塞模式,这意味着进程在尝试读取或写入数据时不会被阻塞,而是立即返回一个错误代码,以表示没有数据可用或管道已满。在LINUX系统中,管道是一种用于进程间通信的机制,可以将一个进程的输出与另一个进程的输入连接在一起。

2023-04-03 00:18:25 1086

原创 用C语言打造简单易用的聊天室——基于客户端/服务器(Client/Server)模型

然后打开FIFO文件并获得它的文件描述符,如果打开失败则输出错误信息并退出程序。它向FIFO中写入一个包含进程ID和退出消息的结构体,告诉服务器客户端已经退出,并关闭FIFO文件描述符。然后进入循环,从标准输入中读取消息内容,将进程ID和消息内容写入FIFO文件中。循环中第一步是清空MI结构体,然后使用read函数从FIFO中读取消息,并将读取的内容存储到MI结构体中。接着通过判断MI中的消息内容,来决定是输出下线提示还是打印接收到的消息内容。如果读取到的消息内容与退出消息相同,打印退出信息并退出循环。

2023-03-21 18:05:18 920

原创 走近Linux:学习系统编程的基础知识

在本文中,我们介绍了系统编程的基本概念,包括进程和线程、内存管理、文件系统和网络编程。我们还给出了一些示例代码来说明这些概念的应用。

2023-03-21 00:05:37 710

原创 快速排序算法解析

具体来说,快速排序将待排序的数组按照一个主元(pivot)分成两个子数组,其中一个子数组的所有元素小于主元,另一个子数组的所有元素大于等于主元。举个例子,假设有一个数组 [3, 6, 1, 8, 4, 2],我们可以选择其中一个元素作为主元,比如选择第一个元素 3,然后将数组分成两个子数组 [1, 2] 和 [6, 8, 4],接下来分别对这两个子数组递归地进行快速排序,直到每个子数组只剩下一个元素,最后将所有子数组合并起来即可得到排序后的数组 [1, 2, 3, 4, 6, 8]。

2023-03-15 10:36:17 1948 1

空空如也

空空如也

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

TA关注的人

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