自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux系统编程——UDP广播

本文展示了Linux系统编程中UDP广播的实现方法,包含发送端(send.c)和接收端(recv.c)两个程序。发送端创建UDP套接字后,通过setsockopt()启用广播功能,向255.255.255.255发送"Hello! Broadcast!"消息。接收端绑定到9999端口,循环接收并显示广播消息及其来源IP和端口。代码演示了基本的UDP广播通信流程,包括套接字创建、选项设置、地址绑定、数据收发等核心操作。

2025-11-28 15:40:52 480

原创 Linux系统编程——UDP组播

本文介绍了Linux系统编程中UDP组播的实现方法。通过setsockopt函数设置套接字选项,包括组播TTL值和加入组播组。发送端(sender.c)创建UDP套接字,设置组播目标地址和TTL值后发送消息;接收端(recv.c)绑定本地端口,加入指定组播组后循环接收数据。示例代码展示了完整的组播通信流程,包括套接字创建、选项设置、数据发送和接收等关键步骤,适用于局域网内的组播通信场景。

2025-11-28 15:38:12 155

原创 Linux系统编程——UDP通信

Linux UDP通信核心函数摘要 Linux系统编程中UDP通信主要通过recvfrom和sendto函数实现: recvfrom函数:从指定套接字接收UDP数据报,获取源地址信息。参数包括套接字描述符、接收缓冲区、控制选项及源地址结构体指针。成功返回接收字节数,失败返回-1。 sendto函数:向指定目标地址发送UDP数据报。参数包括套接字描述符、发送数据缓冲区、控制选项及目标地址结构体。成功返回发送字节数,失败返回-1。 这两个函数都需包含sys/socket.h和sys/types.h头文件,支持阻

2025-11-27 17:48:58 139

原创 Linux系统编程——TCP服务器

本文介绍了Linux系统编程中TCP服务器的实现流程和关键函数。主要内容包括:1) TCP服务器的7个基本步骤:创建套接字、填充信息结构体、绑定、监听、等待连接、收发数据和关闭套接字;2) 详细讲解了socket、bind、listen、accept、recv、send和close等核心函数的参数和使用方法;3) 提供了完整的TCP服务器实现代码示例,展示了如何创建一个能够接收客户端连接并进行数据通信的服务器程序。该程序实现了基本的连接处理和消息回显功能,可作为TCP服务器开发的参考模板。

2025-11-27 15:36:41 1334

原创 Linux系统编程——TCP客户端

本文介绍了Linux系统编程中TCP客户端的实现流程。主要内容包括:客户端通过socket创建流式套接字,填充服务器网络信息结构体,使用connect函数建立连接,以及收发数据的send/recv操作。文章提供了connect函数的参数说明和返回值,并给出了一个完整的TCP客户端实例代码,展示了如何创建套接字、配置服务器地址、建立连接并进行数据收发。代码中还包含错误处理机制,确保程序健壮性。

2025-11-27 15:36:21 209

原创 Linux系统编程——字节序转换

本文介绍了Linux系统编程中的字节序转换相关函数。主要内容包括:大端字节序(网络字节序)和小端字节序(主机字节序)的定义;htonl()和htons()函数将主机字节序转换为网络字节序;ntohl()和ntohs()函数将网络字节序转换为主机字节序;inet_addr()将点分十进制IP字符串转为网络字节序整数;inet_ntoa()将网络字节序整数转为点分十进制字符串。这些函数都定义在arpa/inet.h头文件中,用于处理网络通信中的数据转换需求。

2025-11-26 21:35:45 170

原创 Linux系统编程——进程通信之信号量集

本文介绍了Linux系统编程中进程通信的信号量集机制。信号量集用于实现进程同步,支持多个互不干扰的信号量操作。关键函数包括:ftok生成IPC键值,semget创建/获取信号量集,semctl控制信号量属性,semop执行原子操作(P/V操作)。文章详细说明了P/V操作原理及标志位含义,并提供了实际代码示例(read.c和write.c)展示如何使用信号量集实现进程间同步通信,包括共享内存的读写控制。通过信号量机制,可以确保进程对共享资源的安全访问。

2025-11-23 19:35:06 625

原创 Linux系统编程——进程通信之消息队列

本文介绍了Linux系统编程中进程间通信的消息队列机制。消息队列允许进程通过写入和读取带有类型标识的消息进行通信,默认大小通常为6KB。文章详细讲解了五个关键函数:ftok用于生成IPC键值;msgget创建或获取消息队列;msgsnd向队列写入消息;msgrcv从队列读取消息;msgctl控制队列属性。每个函数都说明了所需头文件、参数含义、返回值及错误处理方式,并提供了相关数据结构的定义。这些函数共同构成了Linux系统V IPC消息队列的核心编程接口,为进程间通信提供了有效手段。

2025-11-22 16:34:18 917

原创 Linux系统编程——进程

本文介绍了Linux系统编程中的进程状态及其相关内容。主要内容包括:进程的定义与组成(包含进程控制块、数据段、代码段等);三种进程类型(交互式、批处理、守护进程)及其特点;六种主要进程状态符号(R运行、S可中断睡眠、D不可中断睡眠等);进程附加状态符号(如+表示前台进程、<表示高优先级等);进程PID规则(分配方式、特殊PID如0号idle进程、1号init进程的功能)。文章系统性地阐述了Linux进程管理的核心概念,为深入理解系统进程机制提供了基础知识框架。

2025-11-19 16:25:44 456

原创 Linux系统编程——进程通信之共享内存

本文介绍了Linux系统编程中进程通信的共享内存机制。主要内容包括共享内存使用步骤和关键函数说明:1)ftok生成IPC键;2)shmget获取共享内存标识符;3)shmat将共享内存映射到进程地址空间;4)shmdt回收内存;5)shmctl清除标识符。文中提供了read.c和write.c两个示例程序,分别实现写入和读取共享内存数据的功能,演示了进程间通过共享内存进行通信的完整流程。代码展示了如何创建共享内存区域、读写数据以及最终清理资源的全过程。

2025-11-17 22:10:54 265

原创 Linux系统编程——信号

摘要:本文介绍了Linux系统编程中常用的信号处理函数,包括kill()函数用于向指定进程发送信号,raise()函数向当前进程发送信号,alarm()函数设置定时器发送SIGALARM信号,pause()函数挂起进程直到信号到达,以及signal()函数用于设置信号处理方式。这些函数是Linux进程间通信和异步事件处理的重要工具,需包含signal.h或unistd.h头文件,使用时需注意参数传递和返回值处理。

2025-11-15 21:14:29 263

原创 Linux系统编程——进程通信之有名管道

本文介绍了Linux系统编程中有名管道的使用。有名管道(FIFO)允许不相关的进程间通信,通过文件系统路径名访问。文章重点讲解了mkfifo()函数创建管道文件的用法,并提供了一个实际案例:使用两个程序(read.c和write.c)通过有名管道进行进程间通信,一个进程写入数据,另一个读取并显示。代码示例演示了管道的创建、读写操作以及退出机制,展示了有名管道的基本工作原理和使用方法。

2025-11-11 21:34:16 255

原创 Linux系统编程——进程通信之无名管道

本文介绍了Linux系统中进程间通信的无名管道机制。无名管道是一种半双工通信方式,仅适用于有亲缘关系的进程(如父子进程)。通过pipe()函数创建管道,返回两个文件描述符分别用于读写操作。文章提供了一个父子进程通过管道通信的实际代码示例:父进程从标准输入获取数据并写入管道,子进程从管道读取数据并输出,直到输入"quit"退出。运行结果展示了该通信机制的实现效果。

2025-11-11 16:25:31 243

原创 Linux系统编程——条件变量

本文介绍了Linux系统编程中的条件变量及其相关函数的使用。条件变量通常与互斥锁配合使用,实现多线程的同步执行。文章详细讲解了四个核心函数:pthread_cond_init(初始化)、pthread_cond_wait(等待信号)、pthread_cond_signal(发送信号)和pthread_cond_destroy(销毁)。最后通过一个实例演示了如何利用条件变量实现两个线程的同步操作:一个线程负责交换数组元素,另一个线程负责打印数组内容。实例展示了条件变量在多线程编程中的典型应用模式。

2025-11-10 17:29:14 308

原创 Linux系统编程——互斥锁

本文介绍了Linux多线程编程中的互斥锁机制。互斥锁用于保护共享资源,确保同一时间只有一个线程访问临界区。文章详细讲解了pthread_mutex_init、pthread_mutex_lock和pthread_mutex_unlock三个核心函数的功能和使用方法,并通过实例展示了互斥锁在多线程环境中的实际应用。在示例程序中,两个线程分别进行数组打印和交换操作,通过互斥锁协调对共享数组的访问,确保了数据操作的完整性。代码运行结果表明互斥锁有效防止了线程间的资源竞争。

2025-11-09 14:02:11 235

原创 Linux系统编程——多线程信号量

本文介绍了Linux系统编程中多线程编程的信号量机制。信号量通过P/V操作实现线程同步,sem_init用于初始化信号量,sem_wait执行P操作减1,sem_post执行V操作加1。文章提供了多线程终端输入输出的实例代码,演示了主线程获取输入、子线程输出内容的过程,当输入"quit"时程序终止。该示例展示了信号量在控制线程执行顺序中的实际应用。

2025-11-09 13:21:53 278

原创 Linux系统编程——线程

本文介绍了Linux系统编程中的多线程基本操作,包括四个关键的pthread函数:创建线程(pthread_create)、等待线程结束(pthread_join)、线程退出(pthread_exit)和取消线程(pthread_cancel)。通过一个终端输入输出实例,展示了如何使用这些函数实现多线程编程:主线程负责接收用户输入,子线程处理并输出内容,当输入"quit"时线程终止。示例代码清晰演示了线程间的同步机制(通过flag变量)和基本控制流程,为Linux多线程编程提供了入门指导

2025-11-07 16:08:45 172

原创 Linux系统编程——守护进程

本文介绍了Linux系统中守护进程(Daemon)的概念和编程实现方法。守护进程是独立于终端的后台服务进程,随系统启动运行、随系统关闭终止。编写守护进程的5个关键步骤包括:创建子进程并让父进程退出、在子进程中创建新会话、改变当前目录为根目录、重设文件权限掩码、关闭文件描述符。文章详细说明了相关系统调用(setsid、chdir、umask等)的功能和使用方法,并提供了一个完整的守护进程实现示例代码,展示了如何创建独立运行的守护进程。

2025-11-04 19:00:33 361

原创 Linux系统编程——进程创建(二)

本文介绍了Linux系统编程中exec函数族的6个主要函数:execl、execle、execlp、execv、execvpe和execvp。这些函数都用于创建新进程执行指定程序,区别在于参数传递方式(列表或数组)、是否自动搜索路径(p后缀)以及是否指定环境变量(e后缀)。每个函数都给出了简明定义、参数说明和示例代码,展示了如何使用这些函数执行常见命令如ls和环境变量操作。文章最后总结后缀含义:l表示列表参数,v表示数组参数,p表示自动路径搜索,e表示指定环境变量。

2025-11-03 21:32:32 375

原创 Linux系统编程——进程退出及状态回收

本文介绍了Linux系统编程中进程退出和状态回收的相关函数。主要内容包括:1) exit和_exit函数的区别,前者会刷新缓冲区;2) wait函数用于阻塞等待任意子进程结束;3) waitpid函数扩展了wait功能,可指定特定子进程和等待方式。文章详细说明了各函数的参数含义、返回值以及pid和options的取值规则,为Linux进程管理编程提供了基础参考。

2025-11-02 14:23:16 320

原创 Linux系统编程——进程创建(一)

本文介绍了Linux系统编程中进程创建的基本知识。重点讲解了fork函数的功能和注意事项,包括父子进程关系、孤儿进程和僵尸进程的形成及避免方法。同时介绍了获取进程ID的getpid和getppid函数。文章最后提供了一个完整的C语言示例程序,演示了如何使用fork创建子进程,并通过getpid获取当前进程ID,展示了父子进程执行的差异。这些内容是Linux系统编程中进程管理的基础知识,对理解进程创建和进程间关系具有重要意义。

2025-11-02 13:53:35 226

原创 Linux系统编程——用户,组ID映射函数

所需头文件:sys/types.h、pwd.h功能:根据uid获取用户信息结构体uid:用户id返回值:成功返回用户信息结构体指针,失败返回NULL并设置errno。

2025-10-30 17:23:05 228

原创 Linux系统编程——动态库制作和使用

本文介绍了Linux系统下动态库的制作与使用方法。在制作方面,详细讲解了从源文件编写到生成位置无关目标文件和最终动态库的完整流程。在使用方面,说明了三种动态库加载方式:环境变量配置、系统路径设置和配置文件修改。文章还列出了gcc编译器和系统工具中与动态库相关的重要选项和命令,包括编译阶段的-fPIC选项、链接阶段的-shared选项、使用阶段的-L和-l选项,以及系统级的ldconfig命令。这些内容为Linux系统下动态库的开发和使用提供了实用指南。

2025-10-30 16:54:41 277

原创 Linux系统编程——目录操作函数

本文简要介绍了Linux系统编程中常用的目录操作函数,包括opendir、closedir和readdir函数的使用方法。opendir用于打开目录,readdir读取目录内容返回dirent结构体指针,closedir关闭目录。dirent结构体包含文件类型、文件名等信息。文章还提供了一个实现ls命令的示例代码,展示如何使用这些函数遍历目录内容并输出文件名。该示例程序接收目录路径参数,读取目录项并以每行10个文件的格式输出文件名列表,最后关闭目录。

2025-10-29 20:39:28 175

原创 Linux系统编程——静态库制作

静态库是和目标文件链接到一起生成可执行文件,包含在生成的可执行文件中,可执行文件运行时加载到内存,在内存中可能有多个副本。

2025-10-28 15:29:44 321

原创 Linux系统编程——元信息查看函数

本文介绍了Linux系统编程中用于获取文件元信息的stat和lstat函数。stat函数用于获取文件属性信息,包括文件类型、权限、大小等,存储在stat结构体中,其中st_mode字段包含文件类型和权限位信息。文章详细解析了文件权限位域和类型宏定义,并提供了查看文件权限及类型的代码示例。lstat函数与stat功能类似,但对于符号链接文件,lstat返回链接本身而非目标文件的属性。通过这两个函数,程序员可以获取并解析文件的完整元数据信息。

2025-10-28 13:44:31 362

原创 Linux系统编程——文件定位与文件控制函数

摘要:本文介绍了Linux系统中文件定位与控制的常用函数。lseek函数用于定位文件偏移量,支持从文件开头、当前位置或结尾进行偏移。fcntl函数提供多种文件描述符控制操作,包括复制描述符、获取/设置标志以及文件锁定功能。通过flock结构体可实现文件锁机制,文中提供了文件加锁、写入数据和解锁的完整示例代码,展示了如何在实际应用中防止文件操作冲突。这些函数是Linux文件系统编程的重要基础工具。

2025-10-27 16:50:44 259

原创 Linux系统编程——文件IO(一)

本文介绍了Linux系统编程中文件I/O的基本操作,包括open、close、read和write函数的使用方法。重点讲解了open函数的flags和mode参数选项,以及各选项对应的功能和权限设置。通过一个实现cp命令功能的代码实例,展示了如何组合使用这些函数进行文件读写操作。该实例包含错误处理、文件打开/关闭、数据读取和写入等基本操作流程,是Linux文件I/O编程的入门示例。

2025-10-26 16:05:48 424

原创 C标准库-时间函数

本文介绍了C语言中处理时间的两个核心函数:time()和localtime()。time()函数获取从1970年开始的秒数,localtime()将秒数转换为包含年月日时分秒的tm结构体。文章提供了函数原型说明、参数解释和返回值信息,并附有一个完整示例程序,展示如何获取当前时间并格式化为易读的日期时间字符串。代码示例清晰地演示了从获取秒数到转换时间结构的完整流程,最后还展示了程序的预期运行结果。

2025-10-25 12:13:10 309

原创 格式化输入/输出函数

本文介绍了C语言中的格式化输入输出函数及其应用。主要内容包括: 格式化输入函数scanf、fscanf、sscanf的功能和参数说明,用于从不同来源读取格式化数据。 格式化输出函数printf、fprintf、sprintf的功能和参数说明,用于向不同目标写入格式化数据。 通过学生结构体示例演示了文件读写操作:使用fprintf和sprintf实现文件写入,使用fscanf和sscanf实现文件读取。 提供了完整的代码示例和执行结果截图,展示了如何将结构体数据格式化为字符串并存入文件,再从文件中读取并解析回

2025-10-23 21:52:16 245

原创 文件指针控制函数

功能:设置光标的位置stream:文件指针offset:偏移量whence:偏移位置返回值:成功返回0,失败返回-1并设置errno。

2025-10-22 17:29:08 225

原创 标准IO-文件IO(二)

本文介绍了C语言中文件IO操作的关键函数。重点讲解了fread和fwrite函数的使用方法、参数含义及返回值处理,以及feof、ferror和clearerr等文件状态检查函数的工作原理。特别强调了feof和ferror的"被动检测"特性,以及clearerr清除标志位的必要性。最后通过一个实现cp命令的完整代码示例,展示了这些函数在实际文件复制操作中的综合应用,包括错误处理、文件打开关闭等完整流程。

2025-10-21 17:15:41 407

原创 标准IO-文件IO(缓冲区)

本文介绍了C语言标准I/O中的缓冲区机制。缓冲区作为内存优化手段,通过批量处理减少硬件IO次数,提升效率。主要分为行缓冲(终端设备)、全缓冲(文件)和无缓冲(stderr)三种类型,并详细说明了各类缓冲区的刷新时机。此外,文章还讲解了fflush、setbuf和setvbuf三个关键函数的功能、参数及注意事项,特别是setvbuf函数允许精确控制缓冲模式和大小,但需注意调用时机和参数配置以避免潜在问题。这些内容为开发者提供了优化I/O性能的技术指导。

2025-10-20 21:40:49 711

原创 标准IO——文件IO(一)

本文介绍了C语言标准IO中的文件操作函数,包括文件打开关闭、字符读写和字符串读写功能。文件打开使用fopen函数,支持多种模式如"r"、"w"、"a"等,可组合b/t修饰符;关闭使用fclose。字符读写使用fgetc/fputc,字符串读写使用fgets/fputs。最后提供了一个用字符读写函数实现文件拷贝的示例代码,展示了如何打开源文件和目标文件,逐字符读取写入,并处理错误情况。这些函数是文件操作的基础,对文件处理编程至关重要。

2025-10-20 18:05:23 792

原创 build-essential常用选项

本文介绍了build-essential工具中gcc和gdb的常用选项。gcc部分包括预处理(-E)、编译(-S)、汇编(-c)、输出(-o)等编译选项,以及优化(-O1/-O2)和调试(-g)相关参数。gdb部分包含启动参数(-s/-c/-d)和调试命令,如断点设置(break)、变量查看(print/display)、程序控制(run/continue)等。文章通过示例图展示了-E、-S、-c、-o选项的使用效果,以及display命令的变量跟踪功能。这些选项和命令是Linux环境下C/C++程序编译调

2025-10-18 12:56:39 365

原创 第十九章 正则表达式

简单地说,正则表达式是一种用于识别文本模式的符号表示法,在某种程度上类似于匹配文件和路径名的Shell通配符,但用途更广。大多数工具和编程语言都支持正则表达式,以便于解决文本问题。正则表达式并非全都相同;不同的工具,不同的编程语言,其正则表达式实现略有差异。本章正则表达式限定在POSIX标准范围内,涵盖了大多数命令行工具,相较于许多编程语言,POSIX使用的符号写法要略微丰富一些。

2025-06-08 23:47:44 731

原创 第十八章 归档与备份

保证系统数据安全,其中一种实现方法是及时备份系统文件。即使不是系统管理员,制作备份、转移大批量文件往往是有好处的。用于管理文件集合的常用程序:文件压缩程序。归档程序。文件同步程序。

2025-06-08 23:46:58 870

原创 第八章 高级键盘技巧

Bash维护者已输入命令的历史记录。历史记录保存在主目录下的bash_history文件中。Bash使用了一个名为Readline的库来实现命令行编辑。在输入命令时,按Tab键触发补全功能。

2025-06-08 23:42:59 414

原创 第十三章 定制提示符

和Linux中的很多其他事物一样,提示符也具备很强的可配置性。

2025-06-08 23:42:14 1010

原创 第二十九章 数组

Shell脚本中的数组使用摘要 Bash支持一维数组,索引从0开始。数组可通过赋值或declare命令创建,支持单元素赋值和批量赋值两种方式。访问数组元素需用${array[index]}格式,*和@可访问所有元素。数组长度通过${#array[@]}获取,!可查找使用中的索引。+=运算符可追加元素,unset删除数组或元素。Bash 4+支持关联数组(字符串索引),需用declare -A声明。数组排序等操作需结合命令替换实现。数组在Shell脚本中虽功能有限,但能有效解决特定问题。

2025-06-08 22:40:10 1932

空空如也

空空如也

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

TA关注的人

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