
linux
洪水猛兽行
这个作者很懒,什么都没留下…
展开
-
ubuntu编译程序链接动态库时提示undefined reference to的解决方法
ubuntu编译程序链接动态库时提示undefined reference to的解决方法原创 2022-08-16 14:40:22 · 1121 阅读 · 1 评论 -
linux下svn支持上传so库的方法。
默认是过滤的,打开方法编辑home目录下的.subversion/config文件,找到#global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__这行打开注释,按实际需求去除过滤项。保存退出。GOOD LUCK。...原创 2020-10-14 15:53:29 · 528 阅读 · 0 评论 -
vsftpd配置多用户登陆的方法
这里以vsftpd version 3.0.3为例。默认的配置文件路径为/etc/vsftpd.conf配置字段的含义见下面表格,表一表二表三表四表五我们来实现这么一种情况,我们只允许三个账号root、hqguest和hqupload登陆,不支持匿名。root登陆访问的目录是/,具有上传和下载权限;hqguest登陆访问的目录是/var/guest,且不能看见除guest之外的目录,具有上传和下载权限;hqupload登陆访问的目录是/var/uplo原创 2020-07-20 14:11:32 · 1820 阅读 · 0 评论 -
linux程序如何检测网卡状态
使用socket+ioctl。举例如下:#include <stdio.h>#include <string.h>#include <errno.h>#include <fcntl.h>#include <getopt.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <net/if.h>#include <stdlib转载 2020-06-22 14:46:40 · 1177 阅读 · 0 评论 -
linux的devel包与普通包有什么区别。
devel包含普通包,只比普通包多了头文件。动态链接库的话两种包都有。编译的时候如果需要用到这个库,那么需要安装这个库的devel,因为需要头文件。...原创 2018-07-27 09:48:14 · 1613 阅读 · 0 评论 -
linux下应用程序依赖的动态库另有依赖动态库时,该程序该如何编译?
假设程序test依赖动态库b,而动态库b依赖动态库a。在编译test的时候,我们希望的是只指定b,而不用指定a,因为我们不希望知道a的依赖库有哪些,只需关心b。那么我们采用这样的思路去编译test的时候,是会报错的。比如:我们编译动态库a:gcc a.c -o liba.so -shared -fPIC我们编译动态库b:gcc b.c -o libb.so -shared -fPIC ...原创 2018-10-30 15:23:50 · 9613 阅读 · 1 评论 -
Makefile里=,+=,:=,?=运算符的区别。
=给变量赋值。+=在变量原有的值上添加新的值。:=覆盖变量原有的值。?=如果没有定义该变量,则赋值,反之不赋。原创 2018-11-16 11:31:13 · 590 阅读 · 0 评论 -
linux的strip含义
转自:https://blog.youkuaiyun.com/stpeace/article/details/47090255 作为一名linux开发人员, 如果没有听说过strip命令, 那是很不应该的。 strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想。 在linux中, strip也有脱衣服的含义, 具体就是从特定文件中剥掉一些符号信息和调试信息。 ...转载 2018-07-11 13:23:26 · 537 阅读 · 0 评论 -
linux如何配置mtu
输入命令:ifconfig 网口名 mtu 数值例如:ifconfig eth0 mtu 1499只能临时生效,重启则恢复,如果想永久生效,可以配置/etc/network/interfaces加入mtu 1499即可。查看配置的mtu是否生效,可以使用ifconfig命令查看。原创 2018-01-17 15:05:32 · 2019 阅读 · 0 评论 -
linux 网桥介绍以及如何配置
我们需要了解的是网桥是一种工作在数据链路层的存储转发设备,用来连接局域网,基于MAC地址来进行端口转发。 比较常见的即透明网桥(transparent bridge)。1、网桥的重要功能1. 源地址跟踪: 网桥通过转发表来记录网桥所能见到的连接站点地址,为帧的转发提供了路径选择。 2. 帧的转发和过滤: 网桥可以对帧进行转发或者过滤2、网桥的工作原理如下图所转载 2018-01-17 14:18:02 · 1961 阅读 · 1 评论 -
grep快速使用指南
在程序开发的时候,如果遇到未知的结构体定义,或者已知的结构体定义,但不知道在哪个头文件定义,这个时候用grep能够快速帮你找到,下面举例说明。例子一:比如我们想知道struct sockaddr_in这个结构体是什么,里面有哪些成员变量,我们可以运行以下命令:grep -r 'struct sockaddr_in' /usr/include意思是在/usr/include/目录下递归匹原创 2017-12-25 15:35:13 · 415 阅读 · 0 评论 -
linux下使用vim编辑文件,出现^M是什么意思?
具体情况,先上张图看看,如果你细心观察,你会发现每一行后面都会有个^M符号。出现这个符号的原因很简单,因为这个文件你在windows平台下编辑过,我们知道在windows平台下,换行符是\r\n,而在linux下是\n,这多出来的\r被vim解释成了^M。虽然有^M这个符号,但是实际编译运行完全不受影响。原创 2017-12-25 14:56:32 · 54145 阅读 · 3 评论 -
如何指定printf的输出颜色。
格式:printf("\033[字背景颜色;字体颜色m字符串\033[0m" );部分颜色代码:字背景颜色: 40--49 字颜色: 30--3940: 黑 30: 黑41: 红 31: 红42: 绿 ...原创 2018-10-30 15:31:01 · 2581 阅读 · 0 评论 -
linux下程序链接多个静态库,提示找不到函数链接的问题。
有时候你会发现函数所在的静态库,明明在Makefile里指定了,但是还是会报错,提示找不到。原因就在于静态库之间有依赖关系以及链接顺序问题。书写在右边的库最先被链接。解决办法:一般来说有两种办法,一种是仔细分析依赖关系,并按照正确的顺序书写库文件的引用。原则是被依赖的尽量写在右边。但是在有些大型项目中,依赖关系可能并不容易梳理清楚。此时可以在命令行参数中重复对库文件的引用。...原创 2018-10-30 16:12:04 · 5406 阅读 · 1 评论 -
linux下Fork与Exec使用
转自:https://www.cnblogs.com/wuchanming/p/3784862.html 一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小...转载 2018-11-09 13:31:04 · 456 阅读 · 0 评论 -
linux thread的joinable和detached属性
linux的thread有两种属性,分别是joinable和detached。我们看下man对于pthread_create说明里的notes部分:A thread may either be joinable or detached. If a thread is joinable, then another thread can call pthread_join(3) to ...原创 2019-09-21 14:52:49 · 947 阅读 · 0 评论 -
gcc编译原理
一、C/C++文件的编译过程:先来看一下gcc的使用方法和常用选项提示:gcc --helpⅠ、使用方法:gcc [选项] 文件名Ⅱ、常用选项:选项 含义-v 查看gcc编译器的版本,显示gcc执行时的详细过程-o <file> Place the output into <file>;指定输出文件名为file,这个名称不能...转载 2019-08-16 10:51:58 · 797 阅读 · 0 评论 -
linux下读写本地配置文件
以windows下ini配置文件为模板。文件内容举例,[screen_attr]real_width=1280real_height=720virtual_width=1280virtual_height=720;disp_resolution值参考;1-720p,2-1080p,3-1440*900disp_resolution=1支持中文内容,注释符号随意,在一行...原创 2019-07-05 14:32:49 · 727 阅读 · 0 评论 -
bootcmd和bootargs
两者都是uboot的环境变量,一,bootcmd作用:在启动uboot后,uboot会执行bootcmd命令。举例:setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'sf probe 0;片选命令,这里选中第0片flash。sf read0x82000000 0x1...原创 2019-06-25 16:02:07 · 1865 阅读 · 0 评论 -
tcpdump如何抓回环包
我们看下ifconfig执行结果,eth0是我们的本地网口,执行tcmpdump,一般是./tcpdump -i eth0,这里我们指定./tcpdump -i lo即可以抓本地应用程序之间通讯的包,即回环包。...原创 2019-06-21 14:15:48 · 5577 阅读 · 0 评论 -
linux 私人垃圾箱的实现。
linux下的rm命令是个危险的命令,它不会把文件放入垃圾箱,而是直接删除。有时候不小心会造成无法挽回的后果。私人垃圾箱是个解决此类问题的好办法。它通过alias机制指向一个脚本,脚本里做的事情就是把文件mv到私人垃圾箱。以ubuntu12.04举例,ubuntu自带了一个垃圾箱,但是它针对的是窗口界面操作,在终端里用不到。一,创建私人垃圾箱假设我的用户名是john。mkdir...原创 2018-12-11 16:00:35 · 559 阅读 · 0 评论 -
make的多线程编译
因为CPU是一个影响编译速度的重要因素,所以make -j带上一个参数,可以把项目在进行中的并行编译,现在服务器上的CPU差不多都是多核多线程的,所以完全可以用make -j4,让make最多允许4个编译进程同时执行,这样可以更有效的利用CPU资源。...原创 2018-11-08 11:00:14 · 23977 阅读 · 0 评论 -
linux守护进程如何写。
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <signal.h>#include <sys/wait.h>#include "common/hqdefine.h"#include "utils/define.h"#define PR...原创 2018-11-09 13:50:43 · 308 阅读 · 0 评论 -
64bitUbuntu执行32位程序报no such file or directory
在64位ubuntu下,执行32位程序,有时候可以执行成功,因为该32位程序不依赖任何库,有时候会提示该程序:no such file or directory,这是因为它依赖一些32位的库,比如glibc,而系统默认提供的是64位glibc,它没法使用,这样你就理解为何它会报这个错误了。解决方法很简单,安装ia32-libs库即可,比如apt-get install ia32-l原创 2017-11-27 15:58:07 · 668 阅读 · 0 评论 -
linux调用系统api出错,如何查看错误原因?
当调用系统api出错后,可以通过打印errno这个变量来获得错误码值,errno变量定义在/usr/include/errno.h里,#ifndef errnoextern int errno;#endif可以看到这是个全局变量,当调用系统api出错后,系统会把错误码赋值给errno,那么知道了错误码,怎么知道对应意思呢?最笨的办法是查看头文件里错误码的说明,比如查看/us原创 2017-12-13 19:18:35 · 2122 阅读 · 0 评论 -
程序显式调用和隐式调用linux动态链接库(*.so)的区别。
我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。 动态库的调用又分为显示和隐式两种方式,一、隐式调用就是编...转载 2017-11-29 19:03:45 · 1312 阅读 · 0 评论 -
Linux Shell 中的反引号,单引号,双引号
反引号位 (`) 位于键盘的Tab键的上方、1键的左方。注意与单引号(')位于Enter键的左方的区别。 在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。 如下,shell会执行反引号中的date命令,把结果插入到echo命令显示的内容中。 [root@localhost sh]# echo The date is `da转载 2017-11-20 10:29:00 · 474 阅读 · 0 评论 -
如何使用gdb调试程序?
一、程序在编译的时候加入-g选项,如gcc -g -o test test.c二、使用gdb运行程序,如gdb ./test三、在命令交互界面输入命令,如runbtquit其中run后,程序就能执行,如果遇到错误就会停止,并显示错误信息,比如产生段错误。bt是backtrace的意思,可以回溯栈信息。quit就是退出gdb。原创 2017-10-12 10:04:38 · 1429 阅读 · 0 评论 -
Makefile简单轻松入门
makefile 介绍make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序。首先,我们用一个示例来说明makefile的书写规则。以便给大家一个感性认识。这个示例来源于gnu的make使用手册,在这个示例中,我们的工程有8个c文件,和3个头文件,我们要写一个makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:1)如果这个工程...转载 2017-10-27 13:47:11 · 202 阅读 · 0 评论 -
error: curses.h: No such file or directory
原因是缺少ncurses库,按下列命令安装即可:apt-get install libncurses5-dev libncursesw5-dev原创 2017-09-28 14:34:51 · 673 阅读 · 0 评论 -
build-essential的作用
我们在ubuntu上编译程序,默认是有gcc的,但是没有g++。如果自己来安装g++也可以,不过它涉及到一些依赖库,有点麻烦。现在有个叫build-essential的包,里面包含了很多开发必要的软件包,很全,很方便。安装方法:apt-get install build-essential,这个包里面有:dpkg-dev fakeroot g++ g++-4.6 libalgo...原创 2017-09-29 11:26:24 · 17264 阅读 · 0 评论 -
ubuntu如何安装libz库
编译程序时,如果遇到无法找到 -lz,意思就是缺少libz库。libz库是提供数据压缩用的函式库,我们需要安装zlib安装包。(名字没有写错哦,libz库对应的安装包名字就是zlib)。在ubuntu下,运行命令apt-get install zlib1g zlib1g-dev即可。原创 2017-09-29 10:53:33 · 23775 阅读 · 0 评论 -
linux环境变量的有效范围
一、/etc/profile里存放的环境变量对于所有用户都有效。不管你是用什么用户登陆,系统都会默认执行source /etc/profile,得到其环境变量。二、如果想要私人定制,可以修改当前用户目录下的.bashrc文件。三、打开一个shell终端,执行export XXX=$XXX:YYY。该环境变量只在当前shell有效,如果再开一个shell,或者关闭该shell,另开一...原创 2017-09-28 14:56:32 · 5072 阅读 · 0 评论 -
如何获取linux系统时间,精确到秒或毫秒或微妙或纳秒?
#include #include int main(int argc,char *argv[]){ time_t now; time(&now); struct tm *pTime = localtime(&now); printf("%4d-%02d-%02d %02d:%02d:%02d\n", pTime->tm原创 2017-11-16 16:28:03 · 6083 阅读 · 0 评论 -
linux如何获取本地ip?
方法有很多种,这里介绍下使用ioctl获取本地ip的方法。先介绍下ioctl,ioctl是设备驱动程序里对设备的I/O通道进行管理,所谓对I/O通道进行管理,就是获取或设置设备的一些特性参数。我们可以利用ioctl获取网卡设备的IP。具体代码实现如下:uint32_t getMachineLocalIp(char *interface){ if (NULL == interfa原创 2017-12-13 13:28:02 · 1510 阅读 · 0 评论 -
fdisk非交互式分区方法
我们知道fdisk可用于对磁盘进行分区,一般都是fdisk /dev/sda进入交互式命令。那么有时候我们可能需要在程序里调用,这时候有没有非交互式方法呢?答案是有的,下面我介绍下。新建一个文件,比如autopart.txt里面输入如下:np1wq中间两个空白的是回车符对应的是分区的起始sector和结束sector,回车表示采取默认的值。接下原创 2017-11-24 17:26:05 · 5399 阅读 · 0 评论 -
gcc的-D,-w,-W,-Wall,-O3这些参数的意义
其意义是添加宏定义,这个很有用。当你想要通过宏控制你的程序,不必傻乎乎的在程序里定义,然后需要哪个版本,去修改宏。只需要在执行gcc的时候,指定-D,后面跟宏的名称即可。示例:gcc test.c -o test -D OPEN_PRINTF_DEBUG或者gcc test.c -o test -DOPEN_PRINTF_DEBUG两者都是可以的。快去试试吧。原创 2017-11-24 16:43:52 · 9165 阅读 · 0 评论 -
Linux命令每天成长快乐之cut和popen
cut是一个选取命令,以行为单位,用指定分隔符将行切割为若干字段,选取所需要的字段。默认是tab分隔符,可通过-d指定分隔符。-f指定选取第几段,从1开始。示例:fdisk -l | cut -d " " -f 1 | grep dev意思就是将fdisk -l的结果按每行进行处理,以空格分割,选取第一个字段,如果该字段里有dev字符串,则显示出来。popen命令与sy原创 2017-11-24 16:32:41 · 220 阅读 · 0 评论 -
mount如果没有指定-t会怎么样?
我们平时对磁盘进行挂载,有时不会指定-t,比如mount /dev/sda1 /mnt那么问题来了,最终linux是按什么文件系统进行挂载的呢?我们看下mount的man文档可以发现如下一段话: If no -t option is given, or if the auto type is specified, mount will try to原创 2017-11-23 17:44:17 · 5899 阅读 · 0 评论 -
glibc和uclibc之间的关系
【glibc,uclibc的简介】1.glibcglibc = GNU C Library是GNU项目,所实现的 C语言标准库(C standard library)。目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。2.uclibc一个小型的C语言标准库...转载 2017-11-22 16:37:54 · 1535 阅读 · 0 评论