
Linux
文章平均质量分 95
益达张先生
这个作者很懒,什么都没留下…
展开
-
TFTP协议详解
TFTP协议详解。参考文章:https://www.pianshen.com/article/822220160/RFC:https://www.rfc-editor.org/rfc/rfc1350原创 2023-02-22 16:14:04 · 2455 阅读 · 0 评论 -
Linux 工具--logrotate
以下内容来自logrotate的man手册。LOGROTATE(8) System Administrator's Manual LOGROTATE(8)NAME logrotate ‐ rotates, compresses, and mails system logsSYNOPSIS logrotate [-dv] [-f|--force] [-s...原创 2020-08-15 09:42:29 · 496 阅读 · 0 评论 -
Linux 守护进程日志文件处理--logrotate+crontab
守护进程离不开日志,日志多了就有想办法压缩、备份、删除。如果守护进程自带此功能,那么问题就没有了。如果没有此功能,可以使用其它方法:1.使用syslogsyslog带日志整理的功能;2.logrotate+crontab不想把日志交给syslog,想自己处理?logrotate可以帮这个忙。root@debian:@@@# cat /etc/logrotate.conf # see "man logrotate" for details# rotate log file..原创 2020-08-06 17:45:05 · 722 阅读 · 0 评论 -
Linux/Unix 编程 —— System V信号量
1 介绍信号量提供一种访问机制,让一个临界区同一时间只有一个线程在访问它, 也就是说信号量是用来调协进程对共享资源的访问的,防止出现因多个程序同时访问一个共享资源而引发的一系列问题。其中共享内存的使用就要用到信号量。一个信号量是一个由内核维护的整数,其值被限制为大于或等于0。在-一个信 号量上可以执行各种操作( 即系统调用),包括:将信号量设置成-一个绝对值; 在信号量当前值的基础上...原创 2020-03-31 15:29:05 · 406 阅读 · 0 评论 -
Linux/Unix 进程间通信IPC
1 IPC 工具分类图43-1总结了UNIX系统上各种通信和同步工具,并根据功能将它们分成了三类。通信:这些工具关注进程之间的数据交换。 同步:这些进程关注进程和线程操作之间的同步。 信号:尽管信号的主要作用并不在此,但在特定场景下仍然可以将它作为一种同步技术。更罕见的是信号还可以作为一种通信技术:信号编号本身是一种形式的信息, 并且可以在实时信号上绑定数据(一个整数或指针)尽管其中...原创 2020-03-31 10:26:46 · 349 阅读 · 0 评论 -
如何在man手册中查找C/C++结构体
【问题】如何在man手册中查找C/C++结构体参考:How to find man pages for C structs (struct sockaddr_in)?方法一最简单的方法,Google根据搜索到的结果可知,要查找的关键字在7手册页的ip项中方法二快速搜索man -k keyword暴力搜索,查找所有man手册man -K keyword...原创 2019-11-25 10:20:45 · 2045 阅读 · 0 评论 -
客户端服务器断开连接后,新连接在描述符号不变情况下,是否可以继续通信
客户端服务器断开连接后,新连接在描述符号不变情况下,是否可以继续通信?当然可以,描述符指定了一个socket通信,描述符号相同,无论socket使用方式是否变化或者重新连接,使用原来描述符的部分不受影响。测试程序:客户端:#include <sys/types.h>#include <errno.h>#include <sys/socket.h&...原创 2019-11-21 17:18:22 · 458 阅读 · 0 评论 -
shell 中使用>/dev/null后对性能的影响
一个测试脚本:#!/bin/shi=1for((i=1;i<100000;i++))do echo $idone测试无输出重定向的时间:bash-2.05b# time ./a.sh......real 0m14.247suser 0m0.890ssys 0m0.170s测试输出重定向到/dev/null情况...原创 2019-11-15 14:42:21 · 550 阅读 · 0 评论 -
Linux 指定编译时动态库路径和运行时动态库路径--解决报错symbol lookup error和cannot open shared object file
动态库的两种路径linux指定动态库路径包括:1.指定编译时动态库路径;2.指定运行时动态库路径。后文提到的动态库路径都是指的是这两种路径。众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib(不管是编译还是运行都会默认搜索这两个路径)。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应...原创 2019-11-15 09:58:36 · 5750 阅读 · 0 评论 -
gcc -fpic 和 -fPIC 参数问题
gcc -fpic 和 -fPIC 参数问题目的:生成位置无关的代码。位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位,...原创 2019-11-14 17:16:13 · 3536 阅读 · 0 评论 -
GDB -fprofile-arcs -ftest-coverage 选项
-fprofile-arcs -ftest-coverage 选项的使用参考:https://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Debugging-Options.html-fprofile-arcsAdd code so that program flowarcsare instrumented. During execution t...原创 2019-11-14 14:09:35 · 559 阅读 · 0 评论 -
Linux 程序性能分析与优化
参考:https://linuxtools-rst.readthedocs.io/zh_CN/latest/advance/03_optimization.html目录1. 分析系统瓶颈2. 分析内存瓶颈3. 分析IO瓶颈4. 分析进程调用5. 优化程序代码 gprof使用步骤6. 其它工具1. 分析系统瓶颈系统响应变慢,首先得定位大致的问题出在哪里,...原创 2019-10-17 10:41:52 · 1765 阅读 · 0 评论 -
Linux C编程——strtok_r 和 strtok 函数
一、简介NAME strtok, strtok_r - extract tokens from stringsSYNOPSIS #include <string.h> char *strtok(char *str, const char *delim); char *strtok_r(char *s...原创 2019-05-31 09:40:33 · 767 阅读 · 0 评论 -
linux C —— 通用链表(整理自Linux内核链表)
目录1. 简介1.1 内核链表的思想1.2 内核链表的技术原理:2. 基于内核链表的通用链表2.1 list.h2.2 test.c3. 内核链表4. 文件下载1. 简介在Linux源代码树的include/linux/list.h文件中,采用了一种类型无关的双循环链表实现方式。其思想是将指针prev和next从具体的数据结构中提取出来构成一种通用的"...原创 2019-06-18 00:44:35 · 2932 阅读 · 1 评论 -
Linux——内存文件系统
Linux内存文件系统:可满足高IO的要求ramdisk: 基于虚拟在内存中的其他文件系统(ex2fs)。 挂载方式:mount /dev/ram /mnt/ramdisk ramfs: 物理内存文件系统,只存在于物理内存中。其大小也不是固定的,而是随着所需要的空间动态得增减。 挂载方式:mount -t ramfs none /mnt/ramfs -o maxsize=2000 ...原创 2019-06-03 14:55:50 · 9792 阅读 · 0 评论 -
Linux C编程 —— 通过文件描述符获得文件路径
文件描述符可以通过open等函数获得;文件流可以通过fopen获取,然后通过fileno获取文件流对应的文件描述符。#include "apue.h"intmain(void){ char name[L_tmpnam], line[MAXLINE]; FILE *fp; struct stat statbuf; char buf[10...原创 2019-06-01 16:28:02 · 1322 阅读 · 0 评论 -
Linux C编程——结构体操作注意事项(深拷贝、偏移量)
在结构体中,需要考虑的有:内存对齐,下面例子可以看到; 结构体含一级、二级指针,有深拷贝和浅拷贝之分; s.i和s->i是计算偏移量,在CPU中计算,不会操作内存。有一个宏 offoset 可以计算结构体成员偏移:SYNOPSIS #include <stddef.h> size_t offsetof(type, member);...原创 2019-05-31 16:48:05 · 625 阅读 · 2 评论 -
Linux 编程——获取时间戳,精确到毫秒
获取时间戳,精确到毫秒/* 日志时间戳,精确到毫秒 */char* get_stime(void){ static char timestr[200] ={0}; struct tm * pTempTm; struct timeval time; gettimeofday(&time,NULL); pTempTm = ...原创 2019-05-31 10:56:24 · 7699 阅读 · 0 评论 -
解决SecureCRT远程登陆Linux误按ctrl+s锁屏
解决远程登陆Linux误按ctrl+s锁屏转自:https://blog.slogra.com/post-198.html 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常会习惯性的按下Ctrl+s来保存文件内容.殊不知这样按下去后面会造成整个终端不响应了,ssh连接还好说,直接关闭ssh连接再重新连接就可以了,但在服务器前使用的话,就只能眼睁睁的看...转载 2019-07-04 15:01:26 · 1984 阅读 · 0 评论 -
fork —— Linux系统编程
循环创建子进程,并区分各个子进程和父进程。#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <string.h>int counter = 1...原创 2018-08-02 23:07:05 · 159 阅读 · 0 评论 -
SMTP协议的常用命令和应答码
从前面的通讯模型可以看出SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP命令和接收SMTP反馈的应答来完成的。在通讯链路建立后,发送SMTP发送MAIL命令指令邮件发送者,若接收SMTP此时可以接收邮件则作出OK的应答,然后发送SMTP继续发出RCPT命令以确认邮件是否收到,如果接收到就作出OK的应答,否则就发出拒绝接收应答,但这并不会对整个邮件操作造成影响。双方如此反...原创 2019-09-30 16:47:37 · 4183 阅读 · 0 评论 -
CentOS6.3 Samba安装配置、多用户、加域
第一步:安装相关组件yum install samba4* krb5* -y samba4是什么就不用说了,krb5是为了以后将samba加入AD域而需要用到 KRB(Kerberos协议)主要用于计算机网络的身份鉴别(Authentication), 其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据(ticket-granting ticket)访问多个服务,即SSO(S...转载 2019-09-23 09:28:55 · 1288 阅读 · 0 评论 -
LINUX 大文件分包压缩和批量解压命令TAR // TAR 排除指定目录
大文件分割压缩分割命令:split 命令 功能说明:切割文件。 语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名] 补充说明:split可将文件切成较小的文件,预设每1000行会切成一个小文件。 参 数:...原创 2019-09-06 14:00:10 · 821 阅读 · 0 评论 -
Linux实用工具—— 静态分析C语言生成函数调用关系的利器cflow
目录cflow的安装和使用cflow的安装cflow的使用文本输出转成dot文件dot文件生成图片 参考连接:cflow的安装和使用cflow的安装cflow是一款静态分析C语言代码的工具,通过它可以生成函数的调用关系。和calltree不一样,cflow有独立的网页介绍它(https://www.gnu.org/software/cflow/#TO...原创 2019-08-02 11:11:23 · 1884 阅读 · 0 评论 -
Linux C —— c程序中获取shell脚本输出(如获取system命令输出)
目录1.使用临时文件1.1 使用shell的重定向1.2 freopen标准输出到文件2. 使用匿名管道3. 使用popen4. 小结1.使用临时文件1.1 使用shell的重定向首先想到的方法就是将命令输出重定向到一个临时文件,在我们的应用程序中读取这个临时文件,获得外部命令执行结果,代码如下所示: #define CMD_STR_LEN 10...原创 2019-08-08 15:17:11 · 3249 阅读 · 1 评论 -
Linux实用工具—— gprof 统计代码行执行次数、时间
gprof1.1简介gprof实际上只是一个用于读取profile结果文件的工具。gprof采用混合方法来收集程序的统计信息,他使用检测方法,在编译过程中在函数入口处插入计数器用于收集每个函数的被调用情况和被调用次数;也使用采样方法,在运行时按一定间隔去检查程序计数器并在分析时找出程序计数器对应的函数来统计函数占用的时间。Gprof具有以下优缺点:1)优点:...转载 2019-08-02 15:36:23 · 1744 阅读 · 0 评论 -
Linux C —— 三种链接属性(external、internal、none)
一、问题引出当多个源文件链接在一起,我们如何处理相同名字的标识符?假设多个源文件均含有变量a,那么它的值到底采用哪个源文件定义的值呢?这就涉及到标识符的链接属性。二、对象链接属性针对标识符而言,对象通常是变量、函数名、形参。三、分类链接属性(linkage)分为三种——外部(external)、内部(internal)、无(none)3.1 外部(external)判...原创 2019-07-05 16:52:25 · 2432 阅读 · 0 评论 -
unix环境高级编程第三版(apue)源代码编译及使用
(1)下载源代码,可以去官网下载:http://apuebook.com/code3e.htm(2)解压缩源代码文件:tar -zxvf src.3e.tar.gz(3)安装libbsd-devel,否则编译会报错不通过,会提示编译threads文件夹里面的内容时报错:/tmp/ccvzZHtf.o: In function `thr_fn':barrier.c:(.text+0x...原创 2019-05-17 23:25:28 · 591 阅读 · 0 评论 -
Linux C 编程——使用json-c库读取json格式的配置文件
1. 简介:参考:https://github.com/json-c/json-c/wikihttps://github.com/json-c/json-chttps://blog.youkuaiyun.com/u014530704/article/details/72674642?utm_source=copyhttps://blog.youkuaiyun.com/w_ww_w/article...原创 2019-05-17 15:14:00 · 8372 阅读 · 0 评论 -
Assert断言函数使用 —— Linux 编程
1. 简介头文件<assert.h>其作用: 如果它的条件返回错误,则终止程序执行。原型定义:#include <assert.h>void assert( int expression );assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运...原创 2018-10-12 08:49:32 · 324 阅读 · 0 评论 -
信号 —— Linux 编程
一、简介A 给 B 发送信号,B 收到信号之前执行自己的代码,收到信号后,不管执行到程序的什么位置都要暂停运行,去处理信号,处理完毕再继续执行,与硬件中断类似 —— 异步模式 ,但信号是软件层面上实现的中断,早期被称为“软中断”。每个进程收到的所有信号,都是由内核负责发送的,内核处理。1、信号的产生(1)、按键产生,如: Ctrl+c :2) SIGINT (终止/中断) ...原创 2018-09-14 13:36:04 · 214 阅读 · 0 评论 -
利用samba实现source Insight编辑Linux下代码——Linux编程工具
参考连接:http://wiki.ubuntu.com.cn/Samba下面是在Kubuntu 10.10下安装samba的步骤:1. 首先安装samba软件:sudo apt-get install sambasudo apt-get install smbfssudo apt-get install samba42. 修改代码目录权限接着把用户目录权限设置为任何人都...原创 2018-08-27 23:18:17 · 2326 阅读 · 0 评论 -
Linux守护进程 —— Linux系统编程
一、什么是守护进程1、守护进程守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond等。3、守护进程的特点 没...原创 2018-08-23 15:04:22 · 546 阅读 · 1 评论 -
进程的状态 —— Linux系统编程
进程状态(R、S、D、T、Z、X)一、进程概念: 1)正在执行的程序 2)正在计算机上执行的程序实例 3)能分配处理器并由处理器执行的实体 进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行。这就可以引入‘进程状态’。 进程在内存中因策会略或调度需求,会处于各种状态。二、Linux下的进程状态:static const c...原创 2018-08-15 15:28:54 · 233 阅读 · 0 评论 -
系统IO和标准C库IO函数 ——Linux编程
一、C库IO函数工作流程示意图: FILE 类型的指针,是特殊结构体类型,包含文件描述符、读写指针位置、内存地址等信息,用于文件读写操作。I/O缓冲区用于利用内存减少硬盘操作。在右侧三种情况下刷新缓冲区,存到硬盘上。磁盘为什么这么慢? 大部分硬盘是机械硬盘,读取寻道时间和写入寻道时间都是在毫秒级(ms)、相对于内存来说读写速...原创 2018-07-31 00:04:21 · 977 阅读 · 0 评论 -
动态库(共享库)、静态库的制作——Linux编程
动态库(共享库)、静态库的制作零、动态库(共享库)、静态库的联系与区别这两种库相同点是两种库都是由.o文件生成的,下边讨论一下它们的不同点: 静态库 静态库文件名的命名方式是“libxxx.a”,库名前加”lib”,后缀用”.a”,“xxx”为静态库名。 链接时间: 静态库的代码是在编译过程中被载入程序中。 链接方式:静态库的链接是将整个函数库的所有数据都整合进了目标代码...原创 2018-07-29 15:06:14 · 194 阅读 · 0 评论 -
extern使用方法总结 ——Linux编程
简介某一变量在整个程序中只可以定义一次,但可以声明多次,否则会产生重定义的错误。extern是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。用于变量 只能用于同类型声明 在一个源文件里定义了一个数组:char a[6];在另外一个文件里用...转载 2018-07-25 23:04:40 · 2694 阅读 · 0 评论 -
shell命令行选项与参数处理--getopt--getopts ——Linux编程
目录 简介1. 手工处理选项和参数2. 使用 getopts 处理多命令行选项3. 使用 getopt 处理多命令行选项简介本文介绍了linux shell中使用命令行选项与命令行参数的方法,在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景。1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理;2,getopts来...原创 2018-07-24 23:54:37 · 2964 阅读 · 0 评论 -
Linux error函数 ——Linux编程
简介error系列函数是Linux系统编程中,一种debug的方式,定义在头文件 <errno.h>中。源代码使用说明三个函数如下:1. void error (int status, int errnum, const char *format,...);这个函数的作用是在输出设备上打印出 errnum 对应的出错信息和format 对应的子串。__st...转载 2018-07-23 23:18:26 · 5850 阅读 · 0 评论 -
操作系统启动简述
1. BIOS 上电后从ROM读取BIOS程序,自检确认硬件的基本功能正常,然后产生一个 BIOS 中断 INT 13H,该中断指向某个接入的可引导设备的引导扇区。它所找到的包含有效的引导记录的第一个引导扇区将被装载到内存中,并且控制权也将从引导扇区转移到此段代码。引导扇区是引导加载器真正的第一阶段。大多数 Linux 发行版本使用的引导加载器有三种:GRUB、GRUB2 和 LILO。GRUB2...原创 2018-04-22 17:34:03 · 618 阅读 · 0 评论