Linux
文章平均质量分 80
fengbingchun
这个作者很懒,什么都没留下…
展开
-
磁盘阵列RAID介绍
磁盘阵列RAID介绍原创 2024-07-23 15:29:11 · 983 阅读 · 0 评论 -
虚拟机Ubuntu 22.04上搭建GitLab操作步骤
虚拟机Ubuntu 22.04上搭建GitLab操作步骤原创 2024-05-31 15:25:57 · 1803 阅读 · 0 评论 -
Verovio简介及在Windows10和Ubuntu 22.04上编译过程
Verovio简介及在Windows10和Ubuntu 22.04上编译过程原创 2024-03-10 10:06:34 · 989 阅读 · 0 评论 -
ssh免密登录及scp/rsync免密传输文件的方式
ssh免密登录及scp/rsync免密传输文件的方式原创 2023-12-10 13:07:38 · 1506 阅读 · 0 评论 -
Linux下为可执行文件添加图标
Linux下为可执行文件添加图标原创 2023-12-02 13:48:53 · 1726 阅读 · 0 评论 -
Linux上将进程、线程与CPU核绑定
Linux上将进程、线程与CPU核绑定原创 2023-10-06 11:55:08 · 3965 阅读 · 0 评论 -
在Ubuntu 18.04上支持C++17的std::filesystem的方法
在Ubuntu 18.04上支持C++17的std::filesystem的方法原创 2023-09-17 10:57:21 · 1794 阅读 · 1 评论 -
Linux下addr2line命令用法
Linux下addr2line命令用于将程序指令地址转换为所对应的函数名、以及函数所在的源文件名和行号。当含有调试信息(-g)的执行程序出现crash时(core dumped),可使用addr2line命令快速定位出错的位置。 如果无法确定文件名或函数名,addr2line将在它们的位置打印两个问号;如果无法确定行号,addr2line将打印0或一个问号。 参数说明: (1).-a:在函数名、文件名和行号信息之前,以十六进制形式显示地址。 ...原创 2021-08-29 14:42:14 · 51547 阅读 · 6 评论 -
通过Windows10上的VS Code打开远端Ubuntu上的项目操作步骤
Ubuntu版本要求是16.04及以上版本。这里以16.04为例。 在Ubuntu上安装OpenSSH server,执行:$ sudo apt-get install openssh-server 在Windows 10 1803+上安装Windows OpenSSH Client(注:Windows早期版本则需要安装Git for Windows): (1).依次点击打开:设置 --> 应用和功能 --> 可选功能 (2)....原创 2021-07-22 09:54:05 · 1192 阅读 · 2 评论 -
Ubuntu上配置VS Code调试C++
直接使用GDB在Ubuntu上调试C++ code,有时不是很方便,这里介绍下在Ubuntu上通过Visual Studio Code调试C++ code操作步骤,通过CMake编译。安装所需依赖:(1).在Ubuntu上安装Visual Studio Code最新稳定版本1.51.1;(2).在VS Code中安装C++插件:C/C++ for Visual Studio Code;(3).在VS Code中安装CMake插件:CMake Tools;(4).在Ubuntu上安装GCC原创 2020-12-15 19:04:06 · 1483 阅读 · 0 评论 -
软件调试的艺术笔记:GDB
很久之前,在https://blog.csdn.net/fengbingchun/article/details/41413381中简单整理过gdb中常用的一些命令,不齐全,这里按照《软件调试的艺术》一书中关于gdb的介绍再做次整理。《软件调试的艺术》于2009年由人民邮电出版社出版。1. 预备知识GDB:Unix程序员最常用的调试工具,是由Richard Stallman开发的GNU项目调试器(GNU Project Debugger)。DDD:Data Display Debugger,数据原创 2020-10-18 12:32:03 · 1312 阅读 · 4 评论 -
Linux下创建进程简介
在博文https://blog.csdn.net/fengbingchun/article/details/108940548中简单介绍了Windows下通过函数CreateProcess创建进程的过程,这里简单介绍下Linux下通过fork函数创建进程的过程。很早之前在https://blog.csdn.net/fengbingchun/article/details/45690745中也曾介绍过。进程创建的UNIX模型为分叉----执行(fork----exec)模型。fork函数调用生成一个完全复原创 2020-10-07 13:04:24 · 1112 阅读 · 0 评论 -
Windows/Linux获取Mac地址和CPU序列号实现
UUID(Universally Unique Identifier)即通用唯一标识符,是指在一台机器上生成的数字,保证在全球范围的唯一性。可用的开源库如libuuid,可参考https://blog.csdn.net/fengbingchun/article/details/94590406。UDID(Unique Device Identifier)即设备唯一标识符。一般可通过获取设备的MAC地址+设备的CPU序列号作为设备的唯一标识符。MAC地址(Media Access Control Ad原创 2020-09-29 19:53:44 · 10547 阅读 · 3 评论 -
Ubuntu上Vim安装NERDTree插件操作步骤
NERDTree是Vim的文件系统浏览器,使用此插件,用户可以直观地浏览复杂的目录层次结构,快速打开文件以进行读取或编辑,以及执行基本的文件系统操作。NERDTree源码在https://github.com/preservim/nerdtree。这里通过Vundle安装NERDTree,Vundle是Vim软件包的缩写,是Vim插件管理器。Vundle源码在https://github.com/VundleVim/Vundle.vim。安装Vundle:(1). 执行如下命令:mkdir原创 2020-08-13 19:18:50 · 2723 阅读 · 0 评论 -
Doxygen使用介绍
Doxygen的主页为http://doxygen.nl/,它的license为GPL,最新发布版本为1.8.17,源代码存放在https://github.com/doxygen/doxygen,它支持的语言包括C、C++、Objective-C、C#、Java、Python等,它支持的系统平台包括Winodws、Linux、MacOS等。你既可以通过源码编译安装,也可以直接通过二进制文件安装,...原创 2020-03-08 16:14:07 · 2731 阅读 · 0 评论 -
Linux下获取usb视频设备vendor id和product id的8种方法
在使用usb摄像头获取视频时,有时需要获取此摄像头供应商ID(vendor id, vid)和产品ID(product id, pid),这里在Linux下提供获取vid和pid的8种方法:1. 通过v4l2中结构体v4l2_capability的成员变量card:此变量中会包含设备名、vid、pid信息,其内容例如为“UVC Camera (046d:081b)”,其中”:”前四个字符为vi...原创 2019-12-12 14:20:48 · 8658 阅读 · 2 评论 -
程序员的自我修养--链接、装载与库笔记:系统调用与API
系统调用(System Call)是应用程序(运行库也是应用程序的一部分)与操作系统内核之间的接口,它决定了应用程序是如何与内核打交道的。无论程序是直接进行系统调用,还是通过运行库,最终还是会到达系统调用这个层面上。1. 系统调用介绍什么是系统调用:在现代的操作系统里,程序运行的时候,本身是没有权利访问多少系统资源的。由于系统有限的资源有可能被多个不同的应用程序同时访问,因此,如果不加以保...原创 2019-10-05 19:35:53 · 944 阅读 · 0 评论 -
程序员的自我修养--链接、装载与库笔记:运行库
1. 入口函数和程序初始化程序从main开始吗?:操作系统装载程序之后,首先运行的代码并不是main的第一行,而是某些别的代码,这些代码负责准备好main函数执行所需要的环境,并且负责调用main函数,这时候你才可以在main函数里放心大胆地写各种代码:申请内存、使用系统调用、触发异常、访问I/O。在main返回之后,它会记录main函数的返回值,调用atexit注册的函数,然后结束进程。...原创 2019-10-05 13:11:35 · 1278 阅读 · 1 评论 -
程序员的自我修养--链接、装载与库笔记:内存
1. 程序的内存布局现代的应用程序都运行在一个内存空间里,在32位的系统里,这个内存空间拥有4GB(2的32次方)的寻址能力。应用程序可以直接使用32位的地址进行寻址,这被称为平坦(flat)的内存模型。在平坦的内存模型中,整个内存是一个统一的地址空间,用户可以使用一个32位的指针访问任意内存位置。大多数操作系统都会将4GB的内存空间中的一部分挪给内核使用,应用程序无法直接访问这一段内存,这一...原创 2019-09-30 17:07:52 · 964 阅读 · 0 评论 -
Linux下gdb attach的使用(调试已在运行的进程)
在Linux上,执行有多线程的程序时,当程序执行退出操作时有时会遇到卡死现象,如果程序模块多,代码量大,很难快速定位,此时可试试gdb attach方法。测试代码main.cpp如下,这里为了使程序退出时产生卡死现象,在第51行时push线程sleep 100分钟:#include <stdio.h>#include <thread>#include <...原创 2019-08-13 11:51:01 · 61705 阅读 · 3 评论 -
通过gdb core dump方法查看程序异常时的堆栈信息
在Linux下可通过core文件来获取当程序异常退出(如异常信号SIGSEGV, SIGABRT等)时的堆栈信息。core dump叫做核心转储,当程序运行过程中发生异常的那一刻的一个内存快照,操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个core文件里,叫core dump。core文件是程序非法执行后core dump后产...原创 2019-07-24 11:27:53 · 13351 阅读 · 0 评论 -
通过配置NFS使Ubuntu和海思3559A板子共享目录
之前在Ubuntu和海思3559A板子之间来回拷贝文件都是用的scp命令,不是很方便,这里通过配置NFS来实现它们之间共享目录,操作步骤如下:1. 在Ubuntu上安装NFS,执行以下命令,执行结果如下:sudo apt-get install nfs-kernel-server2. 在Ubuntu上创建共享目录3559A,执行以下命令:mkdir -p ~/spring/...原创 2019-07-16 10:55:37 · 3463 阅读 · 0 评论 -
开源库libuuid简介及使用
libuuid是一个开源的用于生成UUID(Universally Unique Identifier,通用唯一标识符)的库,它的源码可从https://sourceforge.net/projects/libuuid/ 下载,最新版本为1.0.3,更新于2013年4月27日,此库仅支持在类Linux下编译使用。UUID来源于OSF(Open Software Foundation,开源软件基金会...原创 2019-07-03 21:24:17 · 15771 阅读 · 0 评论 -
QNX操作系统简介
QNX是商业类Unix实时操作系统,主要针对嵌入式系统市场。该产品开发于20世纪80年代初,后来改名为QNX软件系统公司。QNX软件系统公司,黑莓公司旗下子公司,是全球领先的创新嵌入式技术供应商,包括中间件、开发工具和操作系统。QNX Neutrino实时操作系统,QNX Momentics工具套件和QNX Aviage中间件系列基于组件的架构共同构成业界可靠性和延展性最强的架构,帮助建立高性能的...原创 2019-05-06 16:04:12 · 25232 阅读 · 0 评论 -
通过Python在Windows或Linux上快速搭建HTTP服务器
在Windows 7/10或Ubuntu上可以通过python2.x或python3.x来快速搭建一个简单的HTTP服务器。如果python为2.x,则可执行:$ python -m SimpleHTTPServer 或 $ python2 -m SimpleHTTPServer如果python为3.x,则可执行:$ python -m http.server 或 $ python3 -m...原创 2019-05-05 21:41:16 · 17339 阅读 · 0 评论 -
Ubuntu定时任务crontab命令介绍
通过Linux上的crontab命令,我们可以在规定的间隔时间执行指定的系统指令或脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。crontab默认在Ubuntu上是已经安装的,若未安装,则可执行以下命令进行安装:sudo apt-get install croncron服务(守护进程)在系统后台运行,并且会持续地检查/etc/crontab文件和/etc/cron...原创 2019-04-06 16:18:18 · 3089 阅读 · 0 评论 -
TeamViewer介绍:远程控制计算机
TeamViewer是一个可以远程控制计算机的程序,它也可以进行远程文件传输。TeamViewer支持的平台比较多,如Windows, Mac, Linux, ChromeOs, Android, iOS等,最新发布版本为14.x,它有个人免费和商业付费两种。只要对方告诉你他的TeamViewer ID和密码,你就可以远程控制他的计算机或两台计算机间互传文件。两台计算机与平台无关,即你可以用你的W...原创 2019-04-03 09:31:12 · 6846 阅读 · 2 评论 -
程序员的自我修养--链接、装载与库笔记:目标文件里有什么
编译器编译源代码后生成的文件叫做目标文件。目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执行文件在结构上稍有不同。可执行文件格式涵盖了程序的编译、链接、装载和执行的各个方面。1. 目标文件的格式现在PC平台流行的可执行文件格式(Executable)主要是Windo...原创 2019-03-31 18:25:46 · 1364 阅读 · 0 评论 -
GitHub搜索技巧整理
经常会在GitHub上搜索代码、项目或查找相关主题,最简单常用的方法是在GitHub主页搜索框中直接输入相关信息进行查找,如下图所示,但是这样搜到的结果很多都不是自己希望的,这里总结下搜索技巧及常用操作说明:1. GitHub的搜素支持各种不同的操作,详细见https://help.github.com/en/articles/about-searching-on-github ,常用操作...原创 2019-03-17 20:11:45 · 43735 阅读 · 0 评论 -
代码覆盖测试工具Kcov简介及使用
Kcov是一个代码覆盖测试工具,最初基于Bcov,它可在FreeBSD、Linux、OSX系统中使用,支持的语言包括编译语言(compiled languages)、Python和Bash。与Bcov一样,Kcov对编译的程序使用DWARF调试信息,以便无需特殊编译器开关即可收集覆盖信息。注:测试程序需要使用Debug模式编译。在Ubuntu14.04上安装Kcov操作步骤:1. 从 ht...原创 2018-12-03 21:31:48 · 5176 阅读 · 9 评论 -
通过Valgrind的Massif工具进行C++内存使用分析
关于Valgrind的简介可以参考:https://blog.csdn.net/fengbingchun/article/details/50196189Valgrind在Ubuntu上的安装可以参考:https://blog.csdn.net/fengbingchun/article/details/78164837可以使用Valgrind的memcheck工具来检查是否有内存泄漏,可以...原创 2018-10-22 21:28:43 · 14544 阅读 · 0 评论 -
GCC中通过--wrap选项使用包装函数
在使用GCC编译器时,如果不想工程使用系统的库函数,例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free, new/delete函数,可以有两种方法:(1). 使用LD_PRELOAD环境变量:可以设置共享库的路径,并且该库将在任何其它库之前加载,即这个动态库中符号优先级是最高的。(2). 使用GCC的--wrap选项:对symbol使用包装函数(wrapper ...原创 2018-10-05 22:35:01 · 15894 阅读 · 0 评论 -
SSHDroid及sshpass简介
一、SSHDroid简介SSH为Secure Shell的缩写,是建立在应用层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH客户端适用于多种平台,几乎所有UNIX平台都可运行SSH。从客户端来看,SSH提供两种级别的安全验证:1. 基于口令的安全验证:只要你知道自己帐号和口令,就可以登...原创 2018-09-06 22:01:38 · 5102 阅读 · 0 评论 -
Ubuntu14.04 64位机上配置OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.4.3操作步骤
Ubuntu 14.04 64位上默认安装了两个版本的python,一个是python2.7.6,另外一个是python3.4.3。这里使用OpenCV最新的稳定版本3.4.2在Ubuntu上安装python3.4.3支持OpenCV的操作步骤如下:1. 更新包,执行:sudo apt-get updatesudo apt-get upgrade2. 安装依赖(若下面的依赖库本地已...原创 2018-08-16 14:55:04 · 5938 阅读 · 4 评论 -
Ubuntu 14.04上安装pip3/numpy/matplotlib/scipy操作步骤
Ubuntu 14.04 64位上默认安装了两个版本的python,一个是python2.7.6,另外一个是python3.4.0,如下图所示:安装完pip3的结果如下图所示:升级完pip3的结果如下图所示:安装完numpy的结果如下图所示:通过sudo pip3 install matplotlib安装matplotlib时会出现six相关的错误,如下图所示,这里...原创 2018-08-11 19:51:20 · 3322 阅读 · 0 评论 -
Linux下__attribute__((aligned(n)))的使用
关键字__attribute__允许你在定义struct、union、变量等类型时指定特殊属性。此关键字后面是跟着双括号括起来的属性说明。__attribute__不属于标准C语言,它是GCC对C语言的一个扩展用法。你可以在其关键字之前和之后使用"__"指定这些属性中的一个,这样允许你在头文件中使用这些属性,而不必担心可能的同名宏。例如你可以使用__aligned__代替aligned。 ...原创 2018-07-31 22:01:46 · 22820 阅读 · 0 评论 -
Linux下getopt_long函数的使用
getopt_long为解析命令行参数函数,它是Linux C库函数。使用此函数需要包含系统头文件getopt.h。getopt_long函数声明如下:int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);...原创 2018-07-19 22:13:06 · 11040 阅读 · 0 评论 -
Linux下getopt函数的使用
getopt为解析命令行参数函数,它是Linux C库函数。使用此函数需要包含系统头文件unistd.h。getopt函数声明如下:int getopt(int argc, char * const argv[], const char * optstring);其中函数的argc和argv参数通常直接从main的参数直接传递而来。optstring是一个包含合法选项字符的字符串。如...原创 2018-07-19 21:18:36 · 7826 阅读 · 0 评论 -
GCC编译选项参数介绍
gcc和g++分别是gnu的c和c++编译器,下面是整理的常用编译选项参数:#(1). -x: 设定文件所使用的语言,使文件后缀名无效,如下,执行完后生成test.ogcc -c -x c++ test.jpg#(2). -c: 只编译生成目标文件即*.o,只编译不链接生成可执行文件,如下,执行完后生成test.ogcc -c test.cpp#(3). -S: 把文件编译...原创 2018-07-08 17:30:36 · 9660 阅读 · 0 评论 -
C语言中的弱符号与强符号介绍
弱符号(Weak symbol)是链接器(ld)在生成ELF(Executable and Linkable Format,缩写为ELF,可执行和可链接格式,是一种用于可执行文件、目标文件、共享库和核心转储的标准文件格式。ELF文件有两种索引:程序标头中记载了运行时所需的段,而段首地址表记载了二进制文件中段的首地址。)文件的过程中使用的一种特殊属性符号。默认情况下,如果没有特别声明...原创 2018-06-30 21:52:58 · 3916 阅读 · 0 评论