
LinuxC\C++编程技术
文章平均质量分 92
Linux系统与编程技术
夏天又到了
微信号 magicHawaii
展开
-
Linux C\C++编程-线程同步
函数lock用来对一个互斥锁上锁,如果互斥锁没有被上锁,则当前线程(调用线程,调用该函数的线程)可以成功对互斥锁上锁,即当前线程拥有互斥锁,直到当前线程调用解锁函数unlock。如果互斥锁已经被其他线程上锁了,则当前线程挂起,直到互斥锁被其他线程解锁。函数try_lock尝试锁住互斥锁,如果互斥锁被其他线程占有,则当前线程也不会被阻塞,线程调用该函数会出现3种情况:① 如果当前互斥锁没有被其他线程占有,则当前调用线程锁住互斥锁,直到该线程调用unlock释放互斥锁;它的成员函数如表9-1所示。原创 2025-02-11 11:01:30 · 1128 阅读 · 0 评论 -
Linux C\C++编程-Linux系统的字符集
为了把全世界所有的文字符号都统一进行编码,国际标准化组织(International Standard Organization,ISO)提出了Unicode编码方案,它是可以容纳世界上所有文字和符号的字符编码方案,这个方案规定任何语言中的任一字符都只对应唯一的数字,这个数字被称为代码点(Code Point),或称码点、码位,它用十六进制书写,并加上“U+”前缀,比如,“田”的代码点是U+7530;在多字节字符集中,每个字符的编码宽度都是不等的,可以是一个字节,也可以是多个字节。原创 2025-01-24 13:28:24 · 1401 阅读 · 0 评论 -
Linux C\C++编程-建立文件和内存映射
MAP_SHARED类型表示多个进程使用的是一个内存映射的副本,任何一个进程都可以对此映射进行修改,其他的进程对其修改是可见的。而 MAP_PRIVATE则是多个进程使用的文件内存映射,在写入操作后,会复制一个副本给修改的进程,多个进程之间的副本是不一致的。上面的方法因为用了PROT_READ,所以只能读取文件里的内容,不能修改,如果换成PROT_WRITE,就可以修改文件的内容了;可以发现,程序把文件中的内容映射到内存后,再把该内存区域打印出来,显示的正是文件中的内容。【例4.12】修改文件的内存映像。原创 2025-01-23 16:52:52 · 1418 阅读 · 0 评论 -
Linux C\C++编程-文件位置指针与读写文件数据块
先复习一下C语言中的文件指针定位函数fseek(),其声明如下:;其中,fp是文件指针;offset是相对于origin规定的偏移位置量;当offset是向文件末尾方向偏移的时候,无论偏移量是否超出文件末尾,fseek都返回0,当偏移量没有超出文件末尾的时候,文件指针指向正常的偏移地址;当偏移量超出文件末尾的时候,文件指针指向文件末尾,并不会返回表示偏移出错的-1值。当offset向文件头方向偏移的时候,如果偏移量没有超出文件头,就是正常偏移,文件指针指向正确的偏移地址,fseek返回值为0;原创 2025-01-21 14:02:48 · 1331 阅读 · 0 评论 -
Linux C\C++方式下的文件I/O编程
在旧头文件里的fstream.h,如果使用ifstreamfile的默认参数声明一个输入文件流,当这个要读的file文件不存在时,会自动创建一个空文件,从而给判断文件是否存在造成了很多麻烦。因为C++兼容C,所以C中的输入输出函数依然可以在C++中使用,但是很显然,直接把C的那套输入输出搬到C++中肯定无法满足C++的需求,更重要的一点是,C中的输入输出有类型要求,只支持基本类型,因此C++设计了易于使用的并且多种输入输出流接口统一的I/O类库,并且支持多种格式化操作,还可以自定义格式化操作。原创 2025-01-20 13:23:42 · 3075 阅读 · 0 评论 -
Linux C/C++编程-文件的读取与写入示例
count表示要写的数据的长度,单位是字节。需要强调的是,如果函数读取成功,会返回实际读到的数据的字节数,最好能将返回值与参数count做比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件末尾或者read()被信号中断了读取动作。返回值为实际读取到的字节数,如果返回0,表示已到达文件末尾或没有可读取的数据,注意:文件读写位置会随读取到的字节移动。我们可以在/root下放一个文本文件test.txt,然后输入3个字符“abc”,这样程序就能正确打开test.txt并读出文件的内容了。原创 2025-01-18 12:53:32 · 637 阅读 · 0 评论 -
Linux系统调用下的文件I/O编程
I/O就是输入/输出,它是主存和外部设备(比如硬盘、U盘)之间复制数据的过程,其中数据从设备到内存的过程称为输入,数据从内存到设备的过程称为输出。I/O可以分为低级I/O和高级I/O。低级I/O通常也称为不带缓冲的I/O,它是Linux提供的系统调用,如函数open、read、write等。高级I/O通常也称为带缓冲的I/O,比如ANSIC提供的标准I/O库中的fopen、fread、fwrite等函数就是这种高级I/O的例子。原创 2025-01-18 12:46:27 · 1165 阅读 · 0 评论 -
Linux C/C++编程-文件类型
在Linux系统中,可以说一切皆文件。我们看到的目录和外设(如光驱、U盘、硬盘等)都是以文件的形式存在的。在Linux中有7种文件类型:普通文件、目录、块设备文件、字符设备文件、链接文件、管道文件、套接口文件。针对这7种文件类型,分别由相应的字符来表示。这里只需关注第一个字符(即文件类型)即可,其他属性暂不介绍。顺便介绍一下ll和ls-l的区别:ll会显示出当前目录下的隐藏文件,而ls -l不会。原创 2025-01-17 16:50:09 · 822 阅读 · 0 评论 -
Linux C/C++编程-线程池
这里的池是形象的说法。线程池就是有一堆已经创建好了的线程,初始都处于空闲等待状态,当有新的任务需要处理的时候,就从这堆线程(这堆线程比喻为线程池)中取一个空闲等待的线程来处理该任务,当任务处理完毕后,就把该线程放回池中(一般就是将线程状态置为空闲),以供后面的任务继续使用。当池子里的线程全都处于忙碌状态时,线程池中没有可用的空闲等待线程,此时可以根据需要选择创建一个新的线程并置入池中,或者通知任务当前线程池里所有线程都在忙,等待片刻再尝试。这个过程可以用图9-2来表示。图9-29.5.2。原创 2025-01-09 17:30:45 · 842 阅读 · 0 评论 -
Linux C/C++编程-UDP套接字编程示例
UDP套接字创建函数socket()、地址绑定函数bind()与TCP套接字的相同,具体用法可参考第13章。本节仅介绍消息发送函数sendto()和sendmsg,以及消息接收函数recofrom和recvmsg。原创 2025-01-08 10:01:48 · 994 阅读 · 0 评论 -
Linux C/C++编程-获得套接字地址、主机名称和主机信息
一个套接字绑定了地址,就可以通过函数来获取它的套接字地址了。套接字通信需要本地和远程两端建立套接字,这样获取套接字地址可以分为获取本地套接字地址和获取远程套接字地址。其中,获取本地套接字地址的函数是getsockname,这个函数在下面两种情况下可以获得本地套接字地址。(1)本地套接字通过bind函数绑定了地址。(2)本地套接字没有绑定地址,但通过connect函数和远程建立了连接,此时内核会分配一个地址给本地套接字。其中,参数sockfd是套接字描述符;addr指向存放套接字地址的结构体指针;原创 2025-01-02 12:15:16 · 953 阅读 · 0 评论 -
Linux C/C++编程-网络程序架构与套接字类型
本书讲述的Linux网络编程是指用户态网络编程,Linux网络编程还包括内核态网络编程。顾名思义,用户态网络编程开发的程序都是在用户态运行的,内核态网络编程开发的程序都是在内核态运行的。实际上,内核态网络编程和用户态网络编程的概念类似,一般掌握了用户态网络编程后,实现内核态网络编程基本上就是替换一下函数形式。Linux用户态网络编程主要基于套接字API,套接字API是Linux提供的一种网络编程接口。通过套接字API,开发人员既可以在传输层上进行网络编程,也可以跨越传输层直接对网络层进行开发。原创 2024-12-31 17:30:28 · 1286 阅读 · 0 评论 -
【图书介绍】】几本Linux C\C++编程图书
Linux C\C++编程,是IT领域比较稳定的职业发展方向,本文介绍几本开发方面的图书。原创 2024-12-23 10:45:36 · 715 阅读 · 0 评论 -
Linux C/C++编程-线程池
这里的池是形象的说法。线程池就是有一堆已经创建好了的线程,初始都处于空闲等待状态,当有新的任务需要处理的时候,就从这堆线程(这堆线程比喻为线程池)中取一个空闲等待的线程来处理该任务,当任务处理完毕后,就把该线程放回池中(一般就是将线程状态置为空闲),以供后面的任务继续使用。当池子里的线程全都处于忙碌状态时,线程池中没有可用的空闲等待线程,此时可以根据需要选择创建一个新的线程并置入池中,或者通知任务当前线程池里所有线程都在忙,等待片刻再尝试。这个过程可以用图9-2来表示。图9-29.5.2。原创 2024-12-23 10:21:43 · 682 阅读 · 0 评论 -
Linux C/C++编程-线程退出时的清理机会
前面讲了线程的终止,主动终止可以认为是线程正常终止,这种方式是可预见的。被动终止是其他线程要求其结束,这种退出方式是不可预见的,是一种异常终止。不论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因运行出错而退出的前提下,如何保证线程终止时能顺利地释放掉自己所占用的资源,特别是锁资源,就是一个必须解决的问题。经常出现的情形是资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中线程被外界取消,如果取消成功了,则该临界资源将永远处于锁定状态得不到释放。原创 2024-12-20 10:02:31 · 1069 阅读 · 0 评论 -
Linux C/C++编程的线程结束
线程安全退出是编写多线程程序时一个重要的事项。在Linux下,线程的结束通常由以下原因所致:(1)在线程函数中调用pthread_exit函数。(2)线程所属的进程结束了,比如进程调用了exit。(3)线程函数执行结束后返回(return)了。(4)线程被同一进程中的其他线程通知结束或取消。第1种方式,与Windows下的线程退出函数ExitThread不同,pthread_exit不会导致C++对象被析构,所以可以放心使用。原创 2024-12-19 15:28:31 · 886 阅读 · 0 评论 -
Linux C/C++编程的线程属性
【图书推荐】《Linux C与C++一线开发实践(第2版)》_linux c与c++一线开发实践pdf-优快云博客《Linux C与C++一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)Linux系统与编程技术_夏天又到了的博客-优快云博客Linux C/C++编程的线程创建-优快云博客POSIX标准规定线程具有多个属性。那么,具体有哪些属性呢?线程主要的属性包括分离状态(Detached State)、调度策略和参数(Sc原创 2024-12-18 15:29:38 · 1042 阅读 · 0 评论 -
Linux C/C++编程的线程创建
sleep只是等待一个固定的时间,有可能在这个固定的时间内子线程早已经结束,或者子线程运行的时间大于这个固定时间,因此用它来等待子线程结束并不精确,而用pthread_join函数则会一直等到子线程结束后才执行该函数后面的代码,它的第一个参数就是子线程的ID。而主线程在创建子线程后,会等待1秒,这样不至于因为主线程过早结束而导致进程结束。如果没有等待函数sleep,则可能子线程的线程函数还没来得及执行,主线程就结束了,这样会导致子线程的线程函数没有机会执行,因为主线程已经结束,整个应用程序已经退出了。原创 2024-12-05 09:33:25 · 796 阅读 · 0 评论 -
【图书介绍】《Linux C/C++服务器开发实践》
#好书推荐##好书奇遇季#Linux网络服务器编程入门书《Linux C/C++服务器开发实践》,京东当当天猫都有发售。416页厚书,定价99元,打折一下更便宜。本书从五大服务器编程基础技术开始,逐步深入到四大项目案例进行融合开发,融合网络编程和一些数据库、跨平台界面编程知识,使得案例讲解系统完整,甚至稍微修改一下就可以上升为商用软件,比如最后一章的并发游戏服务器。通常网络编程书中,只会分析一个综合案例,而本书干货颇多,提供了HTTP服务器、FTP服务器、并发聊天服务器与并发游戏服务器四大综合案例,可以作为原创 2022-07-07 15:34:09 · 277 阅读 · 0 评论 -
Linux C/C++编程之动态库
ldconfig命令的用途主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf所列的目录下,搜索出可共享的动态链接库(格式如前面介绍的lib*.so*),进而创建出动态装入程序(ld.so程序)所需的连接和缓存文件。我们可以把自己的动态库文件的路径加到/etc/ld.so.conf中,这个文件叫动态库配置文件,接着执行ldconfig,然后系统可以把我们添加的路径作为其默认的搜索路径,一劳永逸。(2)动态库产生后,我们就可以使用动态库了,下面先编写一个主函数。原创 2024-12-02 10:41:23 · 1281 阅读 · 0 评论 -
【图书推荐】《Linux C与C++一线开发实践(第2版)》
Linux C/C++编程在Linux应用程序开发中占有重要的地位,掌握这项技术将在就业竞争中立于不败之地。本书内容针对初中级读者,贴近软件公司一线开发实践。全书厚达620多页,知识点丰富,内容翔实,并配套示例源码、作者QQ群答疑服务。原创 2024-06-21 09:57:08 · 1236 阅读 · 0 评论 -
快速理解Linux C/C++线程池
这里的池是形象的说法。线程池就是有一堆已经创建好了的线程,初始都处于空闲等待状态,当有新的任务需要处理的时候,就从这堆线程(这堆线程比喻为线程池)中取一个空闲等待的线程来处理该任务,当任务处理完毕后,就把该线程放回池中(一般就是将线程状态置为空闲),以供后面的任务继续使用。当池子里的线程全都处于忙碌状态时,线程池中没有可用的空闲等待线程,此时可以根据需要选择创建一个新的线程并置入池中,或者通知任务当前线程池里所有线程都在忙,等待片刻再尝试。这个过程可以用图9-2来表示。图9-29.5.2。原创 2024-08-21 14:24:59 · 967 阅读 · 0 评论 -
Linux C、C++编程之线程同步
对于多线程程序,访问冲突的问题是很普遍的,解决的办法是引入锁(比如互斥锁、读写锁等),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其他线程,没有获得锁的线程只能等待而不能访问共享数据,这样“读-修改-写”3步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其他处理器上并行做这个操作。为保证共享资源的稳定性,需要采用线程同步机制来调整多个线程的执行顺序,比如可以用一把“锁”,一旦某个线程获得了锁的拥有权,即可保证只有它(拥有锁的线程)才能对共享资源进行操作。原创 2024-08-22 16:30:14 · 958 阅读 · 0 评论 -
Linux C/C++编程之静态库
但使用静态库的优点也非常明显,即可执行程序最终运行时不需要和该库有关的文件的支持,因为所有使用的函数都已经被编译进去了,可执行文件可以直接运行。-l用来指定具体的库,其中的lib和.a不用显式写出,g++或gcc会自动去寻找libtest.a,这也是我们前面生成静态库的时候,静态库的文件名要用lib前缀的原因。libxxx.a是生成的静态库文件的名字,xxx通常是我们自己设定的名字,lib是一种习惯,静态库通常以lib开头;(3)选项r:在库中插入模块,若插入的模块名已经在库中存在,则将替换同名的模块。原创 2024-12-02 10:37:39 · 1098 阅读 · 0 评论 -
Linux C/C++编程中的多线程编程基本概念
现代操作系统大多支持多线程概念,每个进程中至少有一个线程,所以即使没有使用多线程编程技术,进程也含有一个主线程,所以也可以说,CPU中执行的是线程,线程是程序的最小执行单位,是操作系统分配CPU时间的最小实体。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时,该进程所产生的线程都会被强制退出并清除。同理,中断线程的执行就是中断线程函数的执行,以后再恢复线程的时候,就会在前面线程函数暂停的地方继续执行下面的代码。结束线程也就不再运行线程函数。原创 2024-12-03 08:33:18 · 795 阅读 · 0 评论