linuxc
cao849861802
这个作者很懒,什么都没留下…
展开
-
linux通过原始套接字直接发送arp请求报文,linux并不能学习到arp表项
而是通过代码直接发送icmp报文,发送icmp报文如果发现没有arp信息的时候系统会自己发送arp请求,通过这样的方式linux系统才能学到arp表项也就是arp -a才有ping的表项;问题:由于我这边需要让linux系统学习到arp表项,所以想着通过代码直接发送arp请求(利用原始套接字),其他设备回复arp报文之后,我以为linux就会记录到arp表项,现象是arp表项并没有;原创 2023-02-21 13:30:20 · 576 阅读 · 0 评论 -
arm-linux-gnueabihf-gcc: error trying to exec ‘cc1‘: execvp: No such file or directory
然后执行source /etc/profile。1. 修改交叉编译工具权限。原创 2022-09-29 11:04:05 · 1397 阅读 · 0 评论 -
ubuntu设置开机自启动,设置自启动
不知道ubuntu从哪个版本开始默认的rc.local就不能添加自启动了,然后可以通过利用systemctl来让rc.local自启动;5. 如果执行systemctl start之后发现脚本并没有按照预想的执行,则可以通过查看status的方法确定问题原因;重启设备后就可以执行startup.sh文件中的内容了;1. 添加system service文件。创建文件startup.service。3. 修改startup.sh执行权限。2. 添加文件startup.sh。4. 启动systemd。.....原创 2022-07-21 11:11:53 · 1835 阅读 · 0 评论 -
./autogen.sh: 4: ./autogen.sh: autoreconf: not found
编译一个开源软件的时候报错./autogen.sh4./autogen.shautoreconfnotfound。原创 2022-07-18 17:13:38 · 859 阅读 · 0 评论 -
kali linux获取root权限
sudo -s原创 2022-03-02 14:18:34 · 1903 阅读 · 0 评论 -
linux批量修改文件后缀
将.txt文件批量修改为.bat文件find ./ -name "*.txt" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.txt ./{}.bat原创 2022-02-08 10:02:26 · 1229 阅读 · 0 评论 -
linux 消息队列的应用实例(代码)
msgid create/************************************************************************ 函数名 : msgIdCreate* 功能描述 : 此处执行两次是为了清空消息队列中的内容, 因为进程即使结束,消息队列中的数据仍然存在;* 输入参数 : 无* 输出参数 : 无* 返回值 : 无*/#define SEND_MSG_KEY 1024int msgIdCreate.原创 2022-01-05 13:31:52 · 682 阅读 · 0 评论 -
ubuntu core dump 调试方法
下面的“test”将指的操作的运行程序,并且所有操作最好在root模式下;1. 设置ulimit修改core的大小限制#查看大小ulimit -a#修改为不限制大小ulimit -c unlimited2. 运行程序./test查看core是否生成,一般core文件在操作的当前路径下或者查看文件/var/log/apport.log里面有记录core文件的生成路径3. 运行gdbgdb ./test ./core这里注意./test之前怎么运行的test,这里最好原创 2021-12-31 11:21:24 · 1070 阅读 · 0 评论 -
redis常用命令,HSET,XADD,XREAD,DEL等
注意:redis的命令大小写并不敏感,都可以用;连接到指定ip的redis服务器redis-cli -h 127.0.0.1添加字符串SET name value获取字符串GET name设置hash值HSET key name value获取hash值HGET key name查看hash中的所有内容HGETALL key删除hash字段HDEL key name删除hash表DEL key发布PUBLISH...原创 2021-12-24 16:18:40 · 1996 阅读 · 0 评论 -
dpkg强制安装软件
dpkg -i --force-overwrite test.deb原创 2021-12-22 17:24:22 · 6837 阅读 · 0 评论 -
虚拟机vmware设置nat模式上网
首先虚拟机有两个虚拟网卡vmnet0和vmnet8这个vmnet0默认的是桥接模式,这个vmnet8默认是nat模式;我们这里只看nat模式,所以先不关心vmnet0虚拟网卡注意:1.在操作或者配置这些内容的时候最好将虚拟机关机,挂起的时候有的选项也是不能设置的; 2. 虚拟网卡不是虚拟机内部操作系统的网卡(这边有三个网卡,本地pc网卡,虚拟网卡,虚拟机内部的操作系统的网卡);1. 配置nat的本地网卡选择vmware的菜单中的编辑选项,选择虚拟网络编辑器,这里编...原创 2021-12-22 17:13:25 · 8718 阅读 · 0 评论 -
虚拟机vmware设置桥接模式上网
首先虚拟机有两个虚拟网卡vmnet0和vmnet8这个vmnet0默认的是桥接模式,这个vmnet8默认是nat模式;我们这里只看桥接模式,所以先不关心vmnet8虚拟网卡注意:1.在操作或者配置这些内容的时候最好将虚拟机关机,挂起的时候有的选项也是不能设置的; 2. 虚拟网卡不是虚拟机内部操作系统的网卡(这边有三个网卡,本地pc网卡,虚拟网卡,虚拟机内部的操作系统的网卡);1. 配置桥接的本地网卡(桥接其实就是相当与将虚拟网卡和本地的实际的网卡用一个hub或者二层交...原创 2021-12-20 10:38:17 · 7959 阅读 · 0 评论 -
linux创建目录及其子目录
mkdir -p /media/build/temp/all/subdir原创 2021-12-03 13:42:11 · 9749 阅读 · 1 评论 -
linux修改目录及目录下内容的权限
chmod -R 0777 /media原创 2021-12-03 13:40:54 · 349 阅读 · 0 评论 -
docker创建,删除,进入,操作,添加等常用命令,docker快速使用
1. pull系统,使用系统之前需要pull系统版本;docker pull ubuntu:18.04#或最新版本docker pull ubuntu2.docker 运行docker run --name apply --net=host -it ubuntu:18.04 /bin/bash这里指定docker name ,网络模式,和ubuntu版本;执行此命令会直接进入docker内部的命令行,因为/bin/bashdocker的网络模式有三种--net,这里用的是host原创 2021-12-02 16:27:35 · 995 阅读 · 0 评论 -
docker apt-get update报错,E: Release file for http://ports.ubuntu.com/ubuntu-ports/dists/bionic-update
报错内容如下:root@tsc-desktop:/# apt-get updateHit:1 http://ports.ubuntu.com/ubuntu-ports bionic InReleaseGet:2 http://ports.ubuntu.com/ubuntu-ports bionic-updates InRelease [88.7 kB]Get:3 http://ports.ubuntu.com/ubuntu-ports bionic-backports InRelease [74原创 2021-12-02 16:14:23 · 922 阅读 · 0 评论 -
linux获取root权限
第一次安装ubuntu的系统后,Ubuntu自己创建了账号之后是没有root账号的,所以第一步操作为:su passwd root然后按照提示输入密码两次,然后确定密码这时候root就有了;然后再输入:su然后输入密码就能获取到root权限,进入root模式了;...原创 2021-11-30 09:41:52 · 818 阅读 · 0 评论 -
net-snmp编译报错:/usr/bin/ld: cannot find crti.o: No such file or directory
err: /usr/bin/ld: cannot find crt1.o: No such file or directory/usr/bin/ld: cannot find crti.o: No such file or directory/usr/bin/ld: cannot find -lc/usr/bin/ld: cannot find crtn.o: No such file or directorycollect2: error: ld returned 1 exit status这原创 2021-11-28 16:14:04 · 2127 阅读 · 0 评论 -
net-snmp私有mib动态加载到snmpd
前面的开发步骤我就不描述了,在我的其他博文中有说,一个是写mib文件,一个是将mib文件转化为.c和.h文件。这里说下如何通过动态加载的方式将.c和.h编译为lib库然后添加到snmpd上,令其可以被访问到1. makefile文件CC=aarch64-linux-gnu-gccCFLAGS := -I ../include/ -I ../../includeLDFLAGS := -L ../lib -L ../../liblib: $(CC) $(CFLAGS) $(LDFLAGS原创 2021-11-28 14:54:16 · 2095 阅读 · 1 评论 -
ubuntu linux 重启网络服务命令
sudo /etc/init.d/networking restart原创 2021-11-28 14:07:02 · 1042 阅读 · 0 评论 -
ubuntu apt-get源替换
1.备份源文件cp /etc/apt/sources.list /etc/apt/sources.list.bak2. 修改apt-get源文件vi /etc/apt/sources.list删除文件中所有内容,然后替换为如下内容;deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiversedeb http://mirrors.ustc.edu.cn/ubuntu/ xenia.原创 2021-11-24 16:40:21 · 1278 阅读 · 0 评论 -
linux c语言配置文件读取和写入简单实现(C代码实现读取配置文件)
configfile.c#include "stdio.h"#include "stdlib.h"#include "string.h"#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#ifndef TRUE #define TRUE 1#endif#ifndef FALSE#define FALSE 0#endifvoid configFil.原创 2021-10-24 17:23:04 · 1339 阅读 · 0 评论 -
ubuntu 添加固定ip,或者动态获取ip
vim /etc/network/interfaces添加如下内容# interfaces(5) file used by ifup(8) and ifdown(8)auto loiface lo inet loopback auto ens33iface ens33 inet staticaddress 192.168.1.111gateway 192.168.1.1netmask 255.255.255.0gateway是网关可写可不写,注意ens33是ifconfi...原创 2021-10-24 10:32:58 · 3699 阅读 · 0 评论 -
mib2c : You didn‘t give mib2c a valid OID to start with.解决
使用mib2c报错如下:root@ecs-435a-0002:/net-snmp/share/snmp/mibs# mib2c ZINFO-DEV-MIB:INFOYou didn't give mib2c a valid OID to start with. IE, I could not findany information about the mib node "ZINFO-DEV-MIB:INFO". This could be causedbecause you supplie原创 2021-10-11 09:03:00 · 491 阅读 · 0 评论 -
no buffer space available,errno==55,ENOBUFS解决方法
这个报错的原因是默认的Linux设置的socket的发包的skb的设置的大小太小了,而代码这边短时间操作太多的发送,然后导致内核的skb未来的及释放就会发生这个报错;参考:https://blog.csdn.net/cao849861802/article/details/117713712解决办法:1.可以通过减少报文的发送,或者延长发包的间隔的办法,让底层慢慢释放skb的空间;2.通过上层配置修改skb的可分配空间的大小,这个值默认是8 * 1024:发送socket:int si原创 2021-06-08 19:34:59 · 2873 阅读 · 0 评论 -
PING SO_SNDBUF,配置ICMP的时候的内核底层相关代码
icmp与SO_SNDBUF相关的发送部分:函数调用链为:icmp_send() -> icmp_push_reply() -> ip_append_data() -> __ip_append_data()在__ip_append_data()函数中的其中一段代码为:if(atomic_read(&sk->sk_wmem_alloc)) <= 2 * sk->sk_sndbuf) skb = sock_wmalloc(sk,原创 2021-06-08 19:24:18 · 655 阅读 · 0 评论 -
c语言十六进制打印结构体
使用十六进制打印结构体的时候发现每次打印都是出来八个字符,如下:typedef struct temp{ int aa; long bb;}TEMP;void printMsg(){ int i; TEMP message; char *fp = (char *)&message; for(i = 0; i < sizeof(TEMP); i++) { printf("%02x ",fp+i); }原创 2021-05-17 13:13:24 · 2047 阅读 · 0 评论 -
c语言实现字符串转换为十进制数字
int sysMyHex10(char *buf){ char *tempbuf = buf; char *startbuf = NULL; int start = 0; int ret = 0; int i = 0; int base = 1; if(buf == NULL) return 0; while(*tempbuf != '\0') { if(((*tempbuf >= '0') && (*tempbuf <= '9')) .原创 2020-09-25 14:58:57 · 2349 阅读 · 0 评论 -
c语言 gets()函数的简单实现
int myGets(char *srcbuf,int buflen,int fp){ char buf[4] = {0}; int count = 0; if(srcbuf == NULL) return -1 while(read(fp,buf,1) > 0) { srcbuf[count++] = buf[0]; if((count >= buflen) || (buf[0] == '\n')).原创 2020-09-25 14:18:55 · 1331 阅读 · 0 评论 -
制作linux内核补丁,patch文件
1.copy内核代码到一个干净的linux系统目录下,比如系统压缩文件为:thd_linux_3.12.17.tar.gz2.解压系统thd_linux_3.12.17.tar.gz,tar -zxvfthd_linux_3.12.17.tar.gz;解压系统后将系统文件夹重新命名为thd_linux_3.12.17_org3.解压系统thd_linux_3.12.17.tar.gz,tar -zxvfthd_linux_3.12.17.tar.gz;解压系统后将系统文件夹重新命名为thd_li..原创 2020-08-05 17:17:14 · 1135 阅读 · 0 评论 -
linux system()函数实现,system()函数体;
int system(const char *cmdstring){ pid_t pid; int status; if(cmdstring == NULL) { return 1; } if((pid = fork()) < 0) { status = -1; } else if(pid == 0) //子进程 { exec.原创 2020-08-05 15:12:48 · 276 阅读 · 0 评论 -
genirq:Setting trigger mode 2 for irq 49 failed (mvebu_gpio_irq_set_type+0x0/0x104)
这个错误的发生原因是:有两个地方对同一个gpio进行了操作,尤其是将gpio修改为edge模式的那个gpio,和其他模式的gpio产生了冲突;问题的函数调用链:gpio_edge_store()gpio_setup_irq()request_any_context_irq()request_threaded_irq()__setup_irq()__irq_set_t...原创 2020-03-26 13:57:46 · 2538 阅读 · 0 评论 -
error:expected '{' at end of input
C语言报错:error:expected '{' at end of input然后后面打印一堆内容,这个问题一般是头文件里面写函数声明的时候没有加分号;原创 2020-03-13 10:20:48 · 22652 阅读 · 0 评论 -
linux系统报错:MEMERASE:Invalid argument
由于报错打印可能有多种,我只说我这边遇到的这个问题的原因;这里报错的原因是:擦除flash的时候,要按照块来擦除,不能自己想擦多大就擦多大,如果自己随意擦除就会这样;...原创 2020-02-26 17:08:07 · 944 阅读 · 0 评论 -
msgget返回值为0
其实msgget的返回值只要不是-1都是没有问题的,当之前没有人使用过msgget的时候返回的可能是0,但是这个0是合法的消息队列id,假如再次调用msgget的话就不是0了,而是另一个值。...原创 2020-02-18 16:16:14 · 1454 阅读 · 0 评论 -
linuxc mkstemp函数使用和注意事项
函数使用如下:void tempFileDeal(){ int fd = 0; char buf[128] = "temp-XXXXXX"; if((fd = mkstemp(buf)) < 0) { perror("mkstemp"); return ; } close(fd);...原创 2020-01-19 17:07:51 · 1105 阅读 · 0 评论 -
消息队列返回错误:Resource temporarily unavailable
这个报错的产生原因是:消息队列的数据太多,导致了数据处理不过来,而消息的发送端仍然往消息队列中发送消息,于是就会返回此错误;ulimit -n什么的都是查看或者修改这些上限什么的,但是在实际运行过程中,修改这个值,只能让程序拖延而已,并不能真正的解决问题;ipcs -a可以查看是否是消息队列异常,当然这个需要你能登陆shell的情况下;然后可以对应ipcs -l查看进程号,再对应ps查...原创 2020-01-13 15:08:22 · 4838 阅读 · 0 评论 -
大型程序的段错误或者无法定位的问题梳理方式
实际项目操作过程中有的段错误会无法定位,因为程序太多。不好确定位置,这时候我们可以采用拆分的方式,1.将各个进程拆分,然后单独运行某个进程,然后依次增多,确认问题出在哪个进程;2.拆分进程中的线程,单独运行线程,确认问题所在的线程;3.拆分消息队列和socket,确认问题所在;通过这种拆分方式虽然会花费一些时间,但是总归会查找到问题所在;...原创 2019-11-19 09:57:15 · 310 阅读 · 0 评论 -
段错误的简单调试方法
段错误如果是自己书写代码的时候写出来的段错误对于比较熟悉c语言的开发者来说,自己立马能够意识到段错误位置。但是平常或者刚刚开始学习的人则不太好调试段错误;这边说一种比较笨但是好用的办法调试段错误,如果是自己写出来的,可以采用打印加延时的操作;比如:char buf[5];char dstBuf[10];memcpy(buf,dstBuf,sizeof(dstBuf));这个...原创 2019-11-19 09:52:59 · 343 阅读 · 0 评论 -
怎样退出vim或者vi
点击ESC进入“正常模式”,然后输入“:”,进入“命令模式”。此时屏幕的下方会出现一个冒号,你可以输入以下命令,并按“ENTER”执行::q,退出(:quit的缩写):q!,退出且不保存(:quit!的缩写):wq,保存并退出:wq!,保存并退出即使文件没有写入权限(强制保存退出):x,保存并退出(类似:wq,但是只有在有更改的情况下才保存):exit,保存并退出(和:x...原创 2019-10-31 09:57:09 · 343 阅读 · 0 评论