linuxc专题

【LinuxC语言】select轮询

文章目录 前言select函数详解selectfd_set类型一个小问题select函数使用步骤改进服务器代码select服务器示例代码 总结 前言 在Linux C语言编程中,我们经常需要处理多个I/O操作。然而,如果我们为每个I/O操作创建一个线程,那么当I/O操作数量增加时,线程管理将变得复杂且效率低下。这就是我们需要select轮询的地方。select是一种高效的I/

【LinuxC语言】深入理解IP地址与端口号

文章目录 前言端口号IP地址IP地址的分类主机地址与网络地址多播是什么子网掩码 特殊的地址与私有的地址总结 前言 在计算机网络中,IP 地址和端口号是两个非常重要的概念。IP 地址用于标识网络上的设备,而端口号则用于在同一设备上区分不同的服务或应用。在 Linux C 语言编程中,我们经常需要处理 IP 地址和端口号,例如在创建套接字、建立网络连接等操作中。因此,深入理解 I

【LinuxC语言】第一个简单的tcp/ip客户端

文章目录 前言一、客户端连接服务器的示意图二、客户端涉及的相关函数socket函数connect函数struct sockaddr结构体相关的转换函数connect主体函数 发送数据函数接收数据函数关闭socket客户端示例代码 总结 前言 在计算机网络中,TCP/IP 是最常见的网络协议。它为我们提供了一种可靠的方式来发送和接收数据。在这篇文章中,我们将使用 Linux C

【LinuxC语言】阻塞、回调与轮询快速理解

文章目录 前言阻塞阻塞的基本概念阻塞函数非阻塞函数区别 回调轮询 总结 前言 在Linux C语言编程中,阻塞、回调和轮询是三种常见的处理输入/输出(I/O)的方式。这些方法在处理网络通信、多线程编程和套接字编程等场景中都有广泛的应用。理解这三种方法的工作原理和使用场景,对于提高编程效率和程序性能至关重要。 阻塞 阻塞的基本概念 阻塞是一种同步操作,它会暂停程序的

【LinuxC语言】IP地址相关的函数

文章目录 前言inet_addr()inet_aton()inet_ntoa()示例代码总结 前言 在Linux C语言编程中,处理网络通信是一个核心主题,其中涉及到的IP地址相关函数扮演着至关重要的角色。这些函数允许我们在不同的网络层次上操作和管理IP地址,从而实现有效的数据传输和通信控制。本文将介绍一些基础的IP地址相关函数,以及它们在网络编程中的应用。 inet_

【linuxC语言】第一个简单的TCP/IP服务器

文章目录 前言一、服务器开发结构图二、深度解析服务器三、服务器开发相关函数htonl函数bind函数listen函数accept函数INADDR_ANY 宏struct sockaddr_in的不同场景区别tcp/ip服务器示例代码 总结 前言 在计算机网络中,TCP/IP 是一种非常重要的通信协议。它是互联网的基础,也是许多网络应用的核心。在 Linux 环境下,我们可以使

【LinuxC语言】网络编程的本质

文章目录 前言网络编程的本质网络编程的相关概念易混知识点其他概念总结 前言 网络编程是计算机科学中的一个重要领域,它涉及到计算机网络中数据的交换和通信。在Linux环境下,C语言是进行网络编程的主要工具之一,因为它提供了一套强大而灵活的函数库来处理网络通信。网络编程的本质是建立和管理网络连接,以便在网络上的两个或多个设备之间传输数据。 网络编程的本质 Linux C语

【LinuxC语言】线程属性pthread_attr_t类型详解

文章目录 前言线程属性的作用pthread_attr_t相关函数pthread_attr_initpthread_attr_destroypthread_attr_setscopepthread_attr_setdetachstatepthread_attr_setschedparampthread_attr_getschedparampthread_attr_setstack 总结

【LinuxC语言】进程间的通信——管道

文章目录 前言不同进程间通信的方式管道匿名管道和命名管道半双工与全双工管道相关函数创建管道 总结 前言 在Linux操作系统中,进程是执行中的程序的实例。每个进程都有自己的地址空间,数据栈以及其他用于跟踪进程执行的辅助数据。操作系统管理这些进程,并通过调度算法来分享处理器时间,使得每个运行的进程都有机会使用处理器的核心。在这种环境中,进程间通信(IPC)变得至关重要,因为在

【LinuxC语言】线程重入

文章目录 前言线程重入是什么线程重入实现示例代码总结 前言 在并发编程中,我们经常需要处理多个线程同时访问和修改共享资源的问题。这可能会导致数据竞争和状态不一致,从而使程序的行为变得不可预测。为了解决这个问题,我们引入了一种称为“线程重入”的机制。线程重入,或者叫做可重入,是指一个函数或子程序可以在任何时刻被中断,然后操作系统调度执行另外一段代码,这段代码又调用了该子程序,而

【LinuxC语言】线程的概念

文章目录 前言一、线程的概念总结 前言 在Linux操作系统中,线程是最小的执行单元。线程是进程的一部分,每个线程都共享其父进程的地址空间,并且可以并行执行。在C语言中,我们可以使用POSIX线程(也称为Pthreads)库来创建和控制线程。线程编程在许多场景中都非常有用,例如在需要执行大量并行任务的情况下,或者在需要提高程序响应性的情况下。 一、线程的概念 线程是操

【LinuxC语言】sigaction

文章目录 前言功能函数定义struct sigaction 结构体使用示例 总结 前言 在Linux系统编程中,信号(Signal)是一种重要的进程间通信机制。信号可以用来通知进程发生了某个事件,比如中断、终止、非法内存访问等。处理信号的方式有多种,其中sigaction是一个强大且灵活的函数,用于设置信号处理程序。与传统的signal函数相比,sigaction提供了更多

LinuxC语言中编码风格——以linux内核的编码风格为例

文章目录 一、注释和空白1.C风格代码对于空白字符的规定如下2.内核代码风格关于缩进的规则有以下几条 二、注释1.单行注释与多行注释2.使用注释的场合主要有以下几种 三、命名原则四、函数五、indent工具:格式化成内核编码风格: 一、注释和空白 (1)代码主要是为了写给人看的,而不是写给机器看的,只是顺便也能用机器执行而已,如果是为了写给机器看那直接写机器指令就好了,没必要用高

LinuxC语言中的数组和rand函数和宏定义和全排列

文章目录 一、数组也是一种复合数据类型1.数组的定义2.数组中的元素通过下标(或者叫索引,Index) 来访问。3.C语言中后缀运算符的优先级高于前缀运算符4.数组下标也可以是表达式,但表达式的值必须是整型的5.数组的初始化6.定义和访问数组——遍历的使用7.数组与结构体的显著区别 二、数组的应用例子:统计随机数1.rand函数介绍(i)预处理器的作用:(ii)那么用 #define 定义的

LinuxC语言中的结构体和数据抽象和enum的使用(一步步的改进代码)

文章目录 一、复合类型与结构体1.在学习一门编程语言时要特别注意以下三个方面:2.用C语言表示一个复数来玩转结构体 二、数据抽象1.围绕上面定义的结构体类型,去定义一些函数2.结合上面的eg进行数据抽象的分析3.习题 三、数据类型标志—enum1.为啥要用enum?2.具体怎么写?3.习题 四、结构体嵌套1.嵌套结构体也是一种递归定义2.嵌套结构体的初始化和访问 一、复合类型与结

LinuxC语言中的switch语句可被if语句代替

一、switch语句的格式如下: 说明: (1)如果传入的参数是2,则从 case 2 分支开始执行,先是打印相应的信息,然后遇到 break 语句,它的作用是跳出整个 switch 语句块。 (2)C语言规定各 case 分支的常量表达式必须互不相同,如果控制表达式不等于任何一个常量表达式,则从 default 分支开始执行,通常把 default 分支写在最后,但不是必须的。 二、使用

LinuxC语言中goto语句如何替代?

一、goto语句的定义 goto 语句,可以实现无条件跳转。goto 语句过于强大了,从程序中的任何地方都可以无条件跳转到任何其它地方,只要在那个地方定义一个标号就行。唯一的限制是 goto 只能跳转到同一个函数中的某个标号处。 二、替代goto语句的写法 通常 goto 语句只用于这种场合,一个函数中任何地方出现了错误条件都可以立即跳转到函数末尾做出错处理(例如释放先前分配的资源、

LinuxC语言中利用求1-100的素数来玩转break和continue

文章目录 一、break和continue语句简介二、带有break和continue来求1-100的素数例子(2)不用break和continue怎么写?(3)循环嵌套怎么写? 一、break和continue语句简介 (1)for 语句的语法是: for (控制表达式1; 控制表达式2; 控制表达式3) 语句 while循环是: (2)continue 语句也会终止当

LinuxC语言中的死循环和 a+++++b 这个表达式如何理解?

(1)死循环 for 语句的语法是: for (控制表达式1; 控制表达式2; 控制表达式3) 语句 等价于while循环是: for (;1;) {…} 等价于 while (1) {…} 死循环C语言规定,如果控制表达式2为空,则认为控制表达式2的值为真,因此死循环也可以写成 for (; ; ) {…} (2)a+++++b 这个表达式如何理解? (3)C99规定了一种新的 for

LinuxC语言中的递归和循环

文章目录 一、用阶乘的例子来解释递归思想和如何写递归1.递归的定义2.图 5.2. factorial(3)的调用过程的解释,理解了以后直接用即可!别用此方法证明递归正确性3.推断递归函数的正确性的方法4.递归总结5.写递归的练习 二、循环迭代1.递归能解决的问题,循环也能解决2.递归思想(函数式编程)与循环思想(命令式编程)的对比3.将递归写成循环的习题 一、用阶乘的例子来解释

LinuxC语言中的增量式(incremental)开发思路

文章目录 一、题目需求5和分析如下:二、解决步骤如下:1.首先编写 distance 这个函数,可以先写一个简单的函数定义:2.可以测试这个函数定义是否有错3.继续写,并用打印语句测试函数4.继续写出最终的函数5.将其它函数写完6.如何组合所写函数来解决整个问题呢? 三、总结:函数的分层设计 假设要从头开始编写一个程序来解决问题 一、题目需求5和分析如下: 二、解决步骤

LinuxC语言中关系运算符和相等性运算符

1.关系运算符和相等性运算符如下 2.注意的点如下 (1)这里的 == 表示数学中的相等关系,相当于数学中的=号,初学者常犯的错误是在控制表达式中把 == 写成=,在C语言中=号是赋值运算符,两者的含义完全不同。(2)如果表达式所表示的比较关系成立则值为真(True) ,否则为假(False)。(3)这些运算符的两个操作数应该是相同类型的,两边都是整型或者都是浮点型可以做比较,但两个字符串

(第24章)LinuxC本质中函数接口

文章目录 一、基本概念二、strcpy与strncpy1.通过Man page来分析strcpy和strncpy(1)NAME和SYNOPSIS(2)DESCRIPTION拷贝数组的越界问题(3)RETURN VALUE,CONFORMING TO,NOTES(4)BUGS, SEE ALSO,COLOPHON写越界段错误,缓冲区,缓冲区溢出overflow 三、malloc与free1.

(第23章)LinuxC本质中指针

文章目录 一、指针的基本概念1.&是取地址运算符2.*是取指针所指向变量的值3.指针之间可以相互赋值4.野指针5.空指针5.void *的简介:常用做函数接口 二、指针类型的参数和返回值三、指针与数组1.指针与数组的关系2.指针的比较3.参数是数组,等价于参数是指针的形式 四、指针与const运算符1.const在指针上的所有用法总结2.为啥要使用const3.字符串字面值通常分配在.rod

(第22章)LinuxC本质中Makefile基础

文章目录 一、基本规则1.多个.c和.h文件的eg2.Makefile文件的规则(1)Makefile文件每条规则的格式(3)make 会自动选择那些受影响的源文件重新编译,不受影响的源文件则不重新编译(4)Makefile文件什么情况下更新?(5)Makefile文件的clean规则:-rm,@rm,第一条规则的目标(缺省目标)(a)把clean声明为伪目标:.PHONY clean(b)