Linux
文章平均质量分 57
吃素的施子
这个作者很懒,什么都没留下…
展开
-
Linux 5种网络IO模型
1、支持一个进程所能打开的最大连接数select:单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大小就是3232,同理64位机器上FD_SETSIZE为3264),当然我们可以对进行修改,然后重新编译内核,但是性能可能会受到影响,这需要进一步的测试。poll:poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的。原创 2023-08-16 16:55:00 · 1834 阅读 · 0 评论 -
Linux查看端口占用的几种方法
大家在操作linux系统,或者在安装linux软件的时候,应该会经常遇到端口被其他进程占用的问题,下面就列举一下怎么查看linux端口被占用的方法。转载 2023-08-15 16:11:07 · 2148 阅读 · 0 评论 -
C/C++时间获取函数
包含C/C++中用于获取时间,和时间转换方面的函数。原创 2023-08-14 14:25:45 · 2408 阅读 · 0 评论 -
Linux的top命令内容输出到文件
使用top命令的-b选项可以将输出重定向到文件,-n选项指定top命令输出多少次结束。有时候我们需要查看某个进程在一段时间内CPU和内存的占用信息。原创 2023-06-08 10:33:59 · 2869 阅读 · 0 评论 -
Linux的.service服务 实现程序开机自启
所有可用的单元文件存放在 /lib/systemd/system/ 和 /etc/systemd/system/ 目录。我们需要在/lib/systemd/system/ 下存放.service文件,当systemctl enable @@@.service 设置了自启动后,会自动在 /etc/systemd/system/ 下创建一个软链接指向 /lib/systemd/system/ 下的文件。通过服务状态可以查看启动服务的.service配置文件。原创 2023-03-14 15:56:29 · 2833 阅读 · 1 评论 -
linux编译动态库时,/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a提示recompile with -fPIC
#g++编译动态库时,使用了ssl的静态库/usr/local/ssl/lib/libcrypto.a,结果一直报上面的错误用openssl0.9.8的的源码重新编译该库,还是报同样的错误,网上搜索了一番,发现正确的编译ssl的流程是./config -fPICmakemake install由于一直用的./config直接配置,没有加后面的参数,所以使用时一直报错。其实报错已经提示了缺少-fPIC,但是一直没仔细研究过加上参数后重新编译ssl库,就可以了...转载 2021-12-19 11:12:42 · 736 阅读 · 0 评论 -
Linux 验证文件完整性md5sum 的用法
MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相 同的报文摘要的可能性是非常非常之小的。在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。可以用下面的命令来获取.转载 2021-12-16 18:14:02 · 1806 阅读 · 0 评论 -
linux中 ldd命令简介
Linux中ldd命令主要用于查看程式运行所需的共享库,那么ldd命令具体要如何使用呢?下面就给大家介绍下Linux下ldd命令的使用方法ldd本身不是一个程序,而仅是一个shell脚本:ldd可以列出一个程序所需要得动态链接库(so)我们可以用which命令找到ldd的位置:$ which ldd/usr/bin/ldd注意: 在 ldd 命令打印的结果中,“=>”左边的表示该程序需要连接的共享库之 so 名称,右边表示由 Linux 的共享库系统找到的对应的共享库.原创 2021-12-09 17:30:49 · 6383 阅读 · 0 评论 -
iOS——Command-Line 查看当前SDK版本并修改默认SDK版本
在工作中可能会碰到用命令行编译、打包iOS应用程序的情况(xcodebuild相关命令)。但是由于SDK版本问题,会报错,说某SDK版本不对,可能是因为升级Xcode导致的SDK版本升级,为了避免高SDK版本对当前代码的稳定性,可以通过修改默认SDK版本来解决。前提是,你需要安装了响应的SDK版本,一般xcode会自带SDK,比如下载就版本的Xcode,就会带有旧版本的SDK。查看SDK版本命令:xcodebuild -showsdks显示如下: 修改sdk版本(前提是我已经原创 2021-12-09 16:53:34 · 3458 阅读 · 0 评论 -
gcc/g++ 动态库和静态库,编译与链接(含示例)
程序编译一般需要经预处理、编译、汇编和链接几个步骤。在实际应用中,有些公共代码需要反复使用,就把这些代码编译成为“库”文件。在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态(链接)库,其特点是可执行文件中包含了库代码的一份完整拷贝,缺点是被多次使用就会多份冗余拷贝。还有一种库,就是程序在开始运行后调用库函数时才被载入,这种库独立于现有的程序,其本身不可执行,但包含着程序需要调用的一些函数,这种库称为动态(链接)库(Dynamic Link Library)。..转载 2021-12-09 15:00:05 · 12484 阅读 · 0 评论 -
linux中CMake版本升级
CMake版本升级1、在网址 https://cmake.org/files/v3.1/ 下载 cmake-3.1.2.tar.gz2、解压3、执行 ./configure4、执行 make5、执行 sudo make install6、执行 sudo update-alternatives --install/usr/bin/cmakecmake /usr/local/bin/cmake1--force7、运行 cmake --version 查看版本号注意: 第6步upd...原创 2021-10-22 10:26:55 · 1862 阅读 · 0 评论 -
Linux程序执行时报:“error while loading shared libraries: xxx.so” 错误解决方法
我们在Linux下执行某些程序的时候可能会提示找不到共享库的错误:"error while loading shared libraries: libprotobuf.so.9: cannot open shared object file: No such file or directory"原因一般有两个:一是:操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对,遇到这种情况那就去网上下载并安装上即可。二是:已经安装了该共享库,但执行需要调用该共享库的程序原创 2021-08-30 10:41:05 · 8618 阅读 · 0 评论 -
如何通过g++编译一个linux程序
项目结构和内容1. 项目结构2. 项目内容swap.h swap.cpp:包含swap.h main.cpp:包含swap.h 编译成可执行文件// 头文件路径包含./includeg++ main.cpp src/swap.cpp -Iinclude -o main生成静态库&链接生成可执行文件生成可执行文件// 进入src目录下cd src// 汇编,生成swap.o文件g++ swap.cpp -c -I../i原创 2021-08-27 17:57:04 · 439 阅读 · 0 评论 -
C++11在linux编译中出现“‘typeof’ was not declared in this scope“ 错误解决
下面这段代码:int main(void){ int a = 10; typeof(a) b = a + 1;}在g++5.4中默认编译可通过,但是若加上c++11选项就编译出错。这是因为typeof是GNU扩展,而不是C++标准。最简单的解决办法是使用gnu++11,而非c++11。g++ a.cpp -std=gnu++11...原创 2021-08-12 16:40:13 · 2891 阅读 · 0 评论 -
Linux实用gdb结合coredump定位崩溃进程
Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是需要更改Linux设置,使程序崩溃时候产生core文件。然后gdb调试即可。1、产生core文件方法产生coredump的条件,首先需要确认当前会话的ulimit –c,若为0,则不会产生对应的coredump,需要进行修改和设置。ulimit -cunlimited (可以产生coredump且不受大小限制),这种设置仅对当前生效,如果想永久生效那么需要在/etc/profile中加入...原创 2021-08-02 09:16:46 · 1039 阅读 · 0 评论 -
Linux下 SVN 常用命令
1、常用命令1、帮助命令:help(h)命令使用:svn help 命令简写:svn h 命令解释:使用这个命令可以看到关于svn所有命令以及简写。有时候有那个命令忘了,可以看看,很有用。2、往版本库中添加新文件:add命令使用:svn add xxx.txt 命令解释:这个命令使用之后,还得使用svn ci xxx.txt命令提交一下。 举例:svn add *.php(添加当前目录下的所有php文件)3、将改变的文件提交到版本库:commit(ci)命令使用:svn ..转载 2021-05-17 10:38:57 · 7212 阅读 · 1 评论 -
C++ windows和linux获取当前时间(精确到毫秒)
windows环境下: struct SYSTEMTIME { boost::uint16_t wYear; boost::uint16_t wMonth; boost::uint16_t wDayOfWeek; boost::uint16_t wDay; boost::uint16_t wHour; boost::uint16_...原创 2021-04-09 13:10:30 · 966 阅读 · 0 评论 -
用make -j 加快编译速度
make -j在Linux编译程序的时候,IO往往不是瓶颈,那CPU就应该是一个影响编译速度的重要因素了。用make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。还是用Kernel来测试:用make: 40分16秒用make -j4:23分16秒用make -j8:22分59秒由此看来,在多核CPU上,适当的进行并行编译还是可以明显提高编译速度的。但并行的任务原创 2021-04-01 11:06:02 · 639 阅读 · 2 评论 -
yum和apt-get的区别
在centos下应该用yuminstallxxx一般来说著名的linux系统基本上分两大类:1.RedHat系列:Redhat、Centos、Fedora等2.Debian系列:Debian、Ubuntu等RedHat系列1常见的安装包格式rpm包,安装rpm包的命令是“rpm-参数”2包管理工具yum3支持tar包Debian系列1常见的安装包格式deb包,安装deb包的命令是“dpkg-参数”2包管理工具apt-get3...原创 2021-03-16 14:07:47 · 98 阅读 · 0 评论 -
Linux查看动态库.so的依赖库
查看动态库依赖3种方法(1) $ ldd /bin/grep linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0xb7eca000) /lib/ld-linux.so.2 (0xb801e000) (2) $ LD_TRACE_LOADED_OBJECTS=1 /bin/grep linux-gate.so.1 => (0xffffe000原创 2021-02-08 14:38:58 · 4841 阅读 · 0 评论 -
引用openssl静态库libcrypto.a和libssl.a出现undefined reference to XXXX错误
解决方案:=======================================================================================================gcc obj/Debug/main.o -L/usr/local/openssl/lib -lssl -lcrypto -ldl -lpthread -o main原因分析:在链接这个库的时候一定要注意2个问题:1.openssl库的版本问题,请直接链到你需要的openss原创 2021-02-08 14:32:22 · 953 阅读 · 0 评论 -
gcc编译:undefined reference to `func‘ 问题的几种情况
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13):undefinedreferenceto`func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(.o)测试代码如下: 然后编译。gcc-ctest.c gcc–...原创 2021-02-08 14:19:43 · 3595 阅读 · 0 评论 -
gcc和g++编译区别 和 库文件包含方法
g++ -g -Wall -std=c++11 main.cppgcc -g -Wall -std=c11 main.cpp如果不想每次写这个-std=C++11这个选项该怎么办呢? 方法1:写Makefile 方法2:取别名 :alias g++11="g++ -std=c++11"-----------------------------------------------------------------------------------------------------原创 2021-02-05 17:09:29 · 473 阅读 · 0 评论 -
解决类似运行报错: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found 的问题
源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。1. 问题原因分析为了安装最新版本的Node.js(最新版本的Node.js使用了C++ 11中,而C++ 11需要code>gcc 4.8+才能支持),将gcc升级.原创 2021-02-05 16:50:57 · 27608 阅读 · 8 评论 -
「 LINUX 」 用systemctl 托管程序
说明系统 centos 7 能够开机启动 能够一键开启,关闭,重启文件注意文件编码的问题service 文件 [Unit] Description=Service After=network.target [Service] ## 可以包含的值为simple、forking、oneshot、dbus、notify、idel其中之一。 ## Type=forking ## 守护进程的PID文件,必须是绝对路径,强烈建议在Type=for原创 2020-11-13 17:07:27 · 815 阅读 · 0 评论 -
Linux系统函数readlink;获取链接所指向的位置
函数原型;#include<unistd.h>ssize_t readlink(const char *path, char *buf, size_t bufsiz);函数说明:readlink是linux系统中一个常用工具,主要用来找出符号链接所指向的位置。readlink()会将参数path的符号链接内容存储到参数buf所指的内存空间,返回的内容不是以\000作字符串结尾,但会将字符串的字符数返回,这使得添加\000变得简单。若参数bufsiz小于符号连接的内容长度,过长原创 2020-11-12 18:13:30 · 2150 阅读 · 1 评论 -
Linux系统 crontab命令详解
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。一、cron服务 cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。 service crond start //启动服务 service crond stop //关闭服务 service cro...原创 2020-11-11 14:07:48 · 330 阅读 · 0 评论 -
因为这7个C++的坑,整个团队加班一星期
近期我们团队进行版本质量加固时,踩到了一些比较隐晦的C++的坑,特总结分享在此,供大家参考。1. string的字符串拼接,导致coredump该问题的核心点在于第9行,竟然是可以编译通过,其原因是x+"-",会被转成char*,然后与to_string叠加导致BUG。2. map的迭代器删除map要删除一个元素,通常通过erase()函数来完成,但是要注意,如果我们传入了一个iterator作为erase的参数来删除当前迭代器所指向的元素,删除完成后iterator会失效,产生未定义行转载 2020-11-09 10:15:09 · 296 阅读 · 0 评论 -
高性能网络编程中的I/O模型
1、互联网服务端处理网络请求的原理首先看看一个典型互联网服务端处理网络请求的典型过程:由上图可以看到,主要处理步骤包括:1)获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3); 2)构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4); 3)返回数据,服务器将已构建好的响应再通过内核空间的网络 I/O 发还给客户端(5-7)。设计服务端并发模型时,主要有如下两个关键点:1)服务器如何管理连接,获取输入数据; 2)服务器如何处理请求..转载 2020-11-04 16:37:30 · 169 阅读 · 0 评论 -
TCP和Websocket协议的区别
先习惯性的看了下某中文百科网站对Web Socket的介绍,觉得很囧。如果大家按照这个答案去参加BAT等互联网公司的前端开发面试,估计会被鄙视。还是让我们阅读一些英文材料吧。让我们直接看stackoverflow上的原文,然后翻译:原文地址:https://stackoverflow.com/questions/16945345/differences-between-tcp-sockets-and-web-sockets-one-more-time这个讨论有超过8万的阅读量。首原创 2020-10-30 18:40:17 · 3308 阅读 · 0 评论 -
MYSQL数据类型详解
一、MySQL的数据类型主要包括以下五大类:整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT浮点数类型:FLOAT、DOUBLE、DECIMAL字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB日期类型:Date、DateTime、TimeStamp、Time、Year其他数据类型:BIN原创 2020-10-28 17:22:50 · 303 阅读 · 0 评论 -
mysql修改表:alter的用法
1:删除列ALTER TABLE 【表名字】 DROP 【列名称】2:增加列ALTER TABLE 【表名字】 ADD 【列名称】 INT NOT NULL COMMENT '注释说明'3:修改列的类型信息ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称(这里可以用和原来列同名即可)】 BIGINT NOT NULL COMMENT '注释说明'4:重命名列ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称】 BIGINT NOT N..原创 2020-10-28 17:17:32 · 379 阅读 · 0 评论 -
C++用valgrind排查内存泄露
前言C/C++运行高效,不管是操作系统内核还是对性有要求的程序(比如游戏引擎)都要求使用C/C++来编写,其实C/C++强大的一点在于能够使用指针自由地控制内存的使用,适时的申请内存和释放内存,从而做到其他编程语言做不到的高效地运行。但是内存管理是一把双刃剑,用好了削铁如泥,用不好自断一臂。在申请堆上内存使用完之后中如果做不到适时有效的释放,那么就会造成内存泄露,久而久之程序就会将系统内存耗尽,导致系统运行出问题。就如同你每天跑去图书馆借一打书籍而不还,直到图书馆倒闭为止。C语言中申请内存和释放内存的原创 2020-10-22 16:35:02 · 682 阅读 · 0 评论 -
TCP三次握手状态流转
三次握手:三次握手是建立TCP连接的过程,在这个过程中需要客户端和服务端总共发送3个包以确认连接的建立。其流程如下图所示:状态流转:TCP为一个连接定义了11种状态(下面粗体字),分别是连接建立前:CLOSED,LISTEN,SYN_SENT,SYN_SCVD数据发送中:ESTABLISHED关闭连接: 被动关闭CLOSE_WAIT(接收到FIN)LAST_WAIT(发送FIN,等待其ACK)主动关闭FIN_WAIT_1(主动发送FIN)FIN_WAIT_2(接收到被...原创 2020-10-20 17:22:39 · 249 阅读 · 0 评论 -
TCP:三次握手:URG、ACK、PSH、RST、SYN、FIN 分别代表什么
建立连接:关闭连接:一、三次握手Three-way HandshakeTCP(Transmission Control Protocol)传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence ..原创 2020-10-20 10:32:50 · 18763 阅读 · 1 评论 -
网络编程:TCP三次握手、四次挥手详解
六个标志位中,我们要用到三个:SYN:SYN= 1表示这是一个连接请求或连接接受报文。在建立连接时用来进行同步序号(个人理解是,在建立连接的时候,提醒对方记录本方的起始序号)。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若是同意建立连接,则应响应的报文段中使SYN=1、ACK=1。因此SYN=1表示该报文是一个连接请求报文或者是一个连接请求接收报文。ACK:确认号只有在该位设置为1的时候才生效,当该位为0是表示确认号无效。TCP规定,在TCP连接建立后所有传送的数据报文段...原创 2020-09-25 14:05:26 · 371 阅读 · 0 评论 -
‘dlopen’报错未定义的引用
在g++编译选项后面,加入dl的库,选项为-ldl,即可.原创 2020-09-15 18:33:14 · 1374 阅读 · 0 评论 -
vim 操作命令大全
曾经使用了两年多的Vim,手册也翻过一遍。虽然现在不怎么用vim了,曾经的笔记还是贴出来,与喜欢vim的朋友分享。#清空文件内容:在命令模式下,首先执行 gg 这里是跳至文件首行 再执行:%d这样就清空了整个文件!还有一种方法就要退出VIM,然后使用echo >> file ,这样也能快速清空文件内容。#1. 关于Vimvim是我最喜欢的编辑器,也是Linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如转载 2020-08-26 11:46:27 · 423 阅读 · 0 评论 -
C++调用shell脚本的两种方式
1、system()#include <stdlib.h>int system(const char *str)编写脚本test.sh:#!/bin/sh echo $HOME编写代码:#include <stdlib.h>#include <iostream>#include <string> int main(){ std::string res; res = system("./test.sh"); std原创 2020-08-19 18:41:02 · 6537 阅读 · 2 评论 -
Linux系统下的清屏方法
在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面分享几种在linux下用过的清屏方法:1、clear命令、这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。2、Ctrl+l(小写的L)、这是一个清屏的快捷键,这个是笔者在工作中用得最多的一种清屏方式,清屏效果同clear命令一样。3、reset命令、这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但整个命原创 2020-08-18 11:34:22 · 2389 阅读 · 0 评论