
Linux 系统编程
文章平均质量分 75
分享在 Linux 系统上进行编程开发的经验与技巧,包括各种 Linux 系统编程、网络编程相关知识等。
阿基米东
本科毕业于广东工业大学,当过校队球员,后自学编程,在嵌入式、物联网、工业自动化、机器人、汽车等领域拥有丰富经验,也是多个开源项目的贡献者,同时对 Web 开发和 AI 技术也很感兴趣。立志成为一名杰出的全栈工程师、开源创客,让世界因我而变得更美好!
展开
-
在 Linux 系统中如何查看和指定 C 语言标准
本文主要介绍在 Linux 系统中如何查看当前支持的 C 语言版本,以及在编译时如何指定 C 语言标准。目前常见的 C 语言标准有 C89、C99、C11 和 C17,详情可参考《原创 2023-05-04 20:42:41 · 3519 阅读 · 1 评论 -
Valgrind 基本用法
介绍Valgrind 是一套 Linux 下的开源仿真调试工具集,遵循 GPLv2 许可协议,可用于内存调试、内存泄漏检测以及性能分析。Valgrind 由内核(core)以及基于内核的其他调试工具组成,内核类似于一个框架(framework),它模拟了一个 CPU 环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind 包含下列一些工具:Memcheck:内存错误检测器(memory error detector)原创 2021-04-12 17:06:21 · 1021 阅读 · 0 评论 -
Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数的使原创 2016-06-05 12:15:01 · 45840 阅读 · 1 评论 -
一个灵活的程序应该是可配置的
这段时间在公司充当救火员的角色,拯救了一个快要腐烂的项目。其中做的一个工作就是将其变成可配置的,这样可以增加程序的灵活性,如果想改变程序的行为,只需修改参数即可,而不是重新编译。首先我们需要把程序中可变的部分抽离出来,程序本身只处理业务逻辑,实现配置参数与功能代码的解耦合。在 Linux 环境编程中,通常有两种做法:通过配置文件与程序进行交互通过命令行选项参数进行交互配置文件的格式可...原创 2020-03-14 12:56:37 · 1142 阅读 · 0 评论 -
Linux 命令行程序的参数识别
我们几乎都是从 Windows 的操作开始学习计算机的,我第一次接触计算机是在初中的时候,当时学校机房安放的都是大块头,搭配经典的XP系统,俨然就是那个时代我对计算机的全部认识。之后很长一段时间,我也一直认为:“哦,电脑这东西,不就是在 Windows 上点来点去吗”?直到大学偶然的机会,我接触了 Linux 系统,才恍然大悟,要是我从一开始就用 Linux 学习计算机那该多好呀! ...原创 2018-05-29 21:11:17 · 2571 阅读 · 0 评论 -
Linux C 程序执行 shell 命令并获取返回结果的方法
据说有统计数据表明,代码的缺陷率是一定的,与所使用的语言无关。Linux提供了很多的实用工具和脚本,在程序中调用工具和脚本,无疑可以简化程序,从而降低代码的缺陷数目。Linux shell 脚本也是一个强大的工具,我们可以根据需要编制脚本,然后在程序中调用自定义脚本。 《Unix 编程艺术》中有一句话“一行 Shell 脚本胜过万行 C”。那么在 Linux 编程中,C 程序如何调用 shel原创 2017-11-29 21:08:43 · 35646 阅读 · 4 评论 -
Linux网络编程——Unix本地套接字
概述 今天,给大家讲解网络编程中的一个内容——Unix 本地套接字。 发现很多人不知道或者不太了解 Unix 本地套接字这个概念,这也难怪,socket API 原本就是为多台主机之间网络通信设计的,并且这种网络 socket 同样支持单台主机上的进程间通信,当然这样做的话,仍然需要 IP 地址和端口号(通过 loopback 地址 127.0.0.1)。Unix本地套接字,其实就是一种专门原创 2017-10-26 12:13:18 · 16270 阅读 · 1 评论 -
Linux高级编程——线程信号处理
Linux 多线程环境中的信号处理不同于进程的信号处理。一方面线程间信号处理函数的共享性使得信号处理更为复杂,另一方面普通异步信号又可转换为同步方式来简化处理。 本文首先介绍信号处理在进程中和线程间的不同,然后描述相应的线程库函数,在此基础上给出一组示例代码,以讨论线程编程中信号处理的细节和注意事项。 本文通过 sigwait() 调用来“等待”信号,而通过 signal()/sigac原创 2017-09-27 12:08:04 · 3275 阅读 · 1 评论 -
Linux 网络编程——TCP 粘包及其解决方案
首先,我们回顾一下 TCP 和 UDP 的头部信息: 图1. TCP 头部 图2. UDP 头部 我们知道,TCP 和 UDP 是 TCP/IP 协议族传输层中的两个具有代表性的协议。其中,TCP 是面向连接的复杂的、可靠的字节流传输协议,而 UDP 是面向无连接的简单的、不可靠的数据报传输协议。“流”的概念就是指不间断的数据结构,可以把它想象成你们家里的自来水管道中的水流。什么意思呢?举个例原创 2017-08-20 16:31:59 · 4088 阅读 · 0 评论 -
万能 Makefile 模板
在 Linux 编程时,对于很多小工程来说,很多时候似乎没有必要用 autoconf 和 automake 工具来生成 Makefile,反而自己写一个 Makefile 更省事。那么这里给大家提供一个简单的 Makefile 模板,根据需要作相应修改,可以适用于很多小项目。CC=gccSRCS=$(wildcard *.c */*.c)OBJS=$(patsubst %.c, %.o, $(S原创 2017-08-06 23:54:49 · 5723 阅读 · 5 评论 -
Ubuntu 搭建强大的 IDE —— Vim + Vundle + 插件(上)
本文描述如何在 Ubuntu 环境中利用插件管理工具 Vundle 搭建一个 Vim 开发环境,从而提高在 Linux 下使用 Vim 进行编程的效率。安装 Vim 在 Ubuntu 上安装 Vim 很简单,在终端敲入如下命令即可:$ sudo apt-get install vim 在 Ubuntu 14.04 以上版本执行上述命令安装的 Vim 是 7.4+ 版本,但如果你和我一样使用 Ub原创 2017-08-05 19:40:00 · 43468 阅读 · 3 评论 -
Ubuntu 搭建强大的 IDE —— Vim + Vundle + 插件(下)
在上一节(http://blog.youkuaiyun.com/lu_embedded/article/details/76732965)我们已经通过 Vundle 下载、安装了一些插件,这些插件有一些可以直接用、有一些需要配置、有一些则需要编译,下面我们一一来看一下常用的一些插件应该怎样用起来吧。 首先要讲的是 YouCompleteMe,它应该是最难安装的一个插件了。vundle 已经帮我们做了一部分工作原创 2017-08-06 00:33:31 · 8928 阅读 · 0 评论 -
每个Linux开发者都应该知道的一些知识
如何学习Linux 作为现代操作系统的代表之一,Linux操作系统非常复杂,内部有多得令人眼花缭乱的各种组件在同步运行和相互通信。对于初学者来说,我认为理解操作系统工作原理最好的方法是利用抽象的思维去理解,也就是说,你可以暂时忽略大部分细节。就像坐车一样,通常你不会去在意车内固定发动机的装配螺栓,也不会关心你走的路是谁修筑的。如果你是一名乘客,可能只会关心如何打开或关闭车门、如何系好安全带以及车要原创 2017-07-02 23:55:27 · 2670 阅读 · 0 评论