Linux 应用程序开发
文章平均质量分 82
yyyyyyyuande
这个作者很懒,什么都没留下…
展开
-
Linux进程间通信六 Posix 共享内存简介与示例
1. 共享内存简介共享内存主要用于不同进程之间相互通信,因为操作的是同一块地址,不需要内核和用户层之间数据拷贝,属于最快的进程间通信方式,不过,为了防止读写冲突,一般需要额外的同步手段。之前介绍了SystemV共享内存的使用方式,今天介绍下Posix共享内存。Posix 共享内存API主要有这几个,shm_open,用于获取或者创建一个共享内存文件描述符,ftruncate,用于设置共享内存的大小,新建的共享内存大小为0,mmap,用于将共享内存文件映射到进程的虚拟地址空间,其实共享内存真正核心的工作主原创 2020-07-04 15:50:12 · 1114 阅读 · 0 评论 -
Linux进程间通信四 Posix 消息队列简介与示例
1. 读取的时候,buffer要足够大。2. 需要手动mount看数据。3. 优先级队列,可以获取优先级参考文档https://www.man7.org/linux/man-pages/man7/mq_overview.7.html原创 2020-07-04 11:49:59 · 4644 阅读 · 0 评论 -
Linux进程间通信三 System V 信号量简介与示例
提纲1. System V信号量简介2. 接口介绍3. 编程实例4. 开发注意事项原创 2020-06-26 14:28:32 · 425 阅读 · 0 评论 -
Linux进程间通信一 System V 共享内存简介与示例
提纲:System V简介共享内存简介API介绍1. 创建system v共享内存#include <sys/ipc.h>#include <sys/shm.h>/*** @brief 创建共享内存ID** @params key 与shm_id关联的key* @params size 共享内存的大小* @params shmflg 标志位和权限控制标志位,可以多个用or运算。IPC_PRIVATE、IPC_CREAT、 IPC_EXCL*.原创 2020-06-06 17:59:11 · 858 阅读 · 0 评论 -
vscode Downloading package ‘C/C++ language components (Windows)‘ Failed.问题解决
vscode打开项目后无法使用代码跳转等功能,然后提示一堆错误: Downloading package 'C/C++ language components (Windows)' Failed. Retrying... Failed. Retrying...下载错误,自动重试多次还是不行。因为网络原因。怀疑无法跳转可能和这个问题相关,Google了一下,网上看到一篇文章,说是可以手动下...原创 2019-12-08 21:15:01 · 15193 阅读 · 6 评论 -
vscode remote ssh 远程开发免密登陆方法
使用vscode远程插件remote-ssh可以在本地直接编辑服务器代码,使用非常方便。但是,每次打开的时候都需要手动输入密码,非常繁琐,Google了一个免密登录的方法,使用ssh-keygen -t rsa 在本地用户目录下.ssh生成一对密钥,id_rsa和id_rsa.pub。如果本地目录已经有该文件则不用在重新生成。然后把公钥id_rsa.pub的内容追加到服务器/home/.ssh...原创 2019-12-08 21:03:53 · 13026 阅读 · 0 评论 -
Linux 性能分析工具总结
介绍下日常开发使用的分析工具,如有新的,请在评论中指出。一. gprof,打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。使用过程简单,只需三个步骤。使用-pg编译、链接选项开启分析功能。 执行程序,会在当前目录生成gmon.out文件。 使用gprof处理gmon.out得到分析文件。例子://使用-pg选项编译、链接gcc -o gprof...原创 2019-11-10 16:11:50 · 367 阅读 · 0 评论 -
Linux面试相关 c程序的运行流程
在Linux中,运行一个程序时,首先由shell调用fork,然后在子进程中真正执行这个命令,首先是调用execve来加载可执行文件,然后将所需要的库文件映射到进程的虚拟内存空间中,此时,进程执行上下文加载完成,开始执行代码段。Linux中程序是以可执行文件的形式存放在磁盘上,可执行文件既包括被执行函数的目标代码,又包括被执行函数使用到的数据,它描述了如何初始化一个新的执行上下文。exec系列...原创 2019-10-30 17:26:54 · 291 阅读 · 0 评论 -
TACACS 协议简介与开发总结
这个项目来源于国外某运营商客户的需求,整个开发流程除了参考基本的tacacs+协议外,还借鉴了Github上一个类似项目的设计,下面介绍下协议的基本内容和开发注意事项以及对接测试环境的搭建。目录0. 协议简介 1. tacacs+消息头2.1 认证报文:2.2 认证响应报文:3.1 授权请求报文:3.2 授权响应报文:4.1 计费请求报文:...原创 2019-05-10 14:19:59 · 7260 阅读 · 3 评论 -
source insight搜不到关联代码
分析内核源码的时候使用ss无法跳转到代码定义的地方,网上搜索了一下,这种情况需要重新build一下工程。试了一下,果然有用。Projects->Rebuild Project...原创 2019-05-20 11:03:54 · 4260 阅读 · 0 评论 -
ubuntu 创建github公钥
命令:ssh-keygen -C '你的邮箱地址' -t rsa在home/xxx/.ssh下面生成id_rsa.pub文件,将其内容添加到github ssh公约里面即可。参考文档:1.https://www.cnblogs.com/rockchen26sh/p/6472125.html...原创 2019-05-20 08:56:34 · 747 阅读 · 0 评论 -
win10 WSL(1903)安装samba服务器实现文件共享
基于Linux开发的时候经常需要搭建虚拟机,如果只有一台电脑的话安装虚拟机很容易拖慢电脑速度。微软win10系统提供了一个新的解决方案,它内置了Linux子系统,可以直接在这个子系统里面安装samba,然后运行即可。我第一次安装的时候遇到一些问题,无法访问成功,samba服务无法启动,看log是权限问题,网上搜了一圈也没说个所以然出来,google了一篇完整的教程,讲的特别详细,完全按照它写的重新...转载 2019-05-20 08:39:24 · 11741 阅读 · 0 评论 -
Linux开发中 MD5值的计算
Go语言中crypto/md5包中提供了MD5计算的API,在Linux中,openssl库也提供了类似的接口,编译的时候加上链接选项-lcrypto 就可以使用了。基本API有两种,一种是MD5(),另一种是分为三个部分,MD5_Init, MD5_Update, MD5_Final,这个适合长度不确定的数据计算: #include <openssl/md5.h> //...原创 2019-05-09 15:52:22 · 842 阅读 · 0 评论 -
wireshark 抓包显示 TCP segment of a reassembled PDU的问题
测试tacacs客户端和服务器(TCP)通信发现客户端认证报文发出去了,服务器没收到,抓包显示发送的报文携带了TCP segment of a reassembled PDU这个标识,正常的报文应该解析成Authentication的百思不得其解,看了网上的一篇文章(关于“TCP segment of a reassembled PDU”),说是wireshark解析不出来的原因。仔细想了下...原创 2019-04-30 15:49:40 · 5323 阅读 · 0 评论 -
linux epoll监听套接字实例
linux epoll机制用于IO多路复用,能够同时监听多个接字,使用起来比较简单。相关接口: #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags); //创建epoll实例 int epoll_ctl(in...原创 2018-06-06 00:00:06 · 1738 阅读 · 0 评论 -
linux 应用层编程之内核链表list的使用
linux内核提供了一个经典通用的双向循环链表list的实现,任何模块都可以借助该接口实现自己的内部循环链表。因为是通用的,可以直接移植到用户态中使用,下面介绍相关的接口与一个简单操作例子,包括链表的插入、查询、修改和删除操作。想深入了解的话直接阅读内核list源代码,代码不是很多,只有list.h 和 types.h。内核源码可以直接下载也可以使用下文给出的链接。内核定义了链表的结构体,任何链表...原创 2018-06-11 00:13:46 · 5600 阅读 · 0 评论 -
Linux开发环境搭建三 使用mount -t cifs 挂载windows共享目录方法与问题解决
嵌入式开发通常是在linux环境下编译,windows下开发,这就需要在linux环境下访问windows目录了,或者在windows上访问linux目录。通常有三种方式如果是在vm虚拟机上,vm提供了一个设置共享目录功能。如果linux是一台服务器的话,可以在linux上安装samba服务器,这样windows就可以访问linux的目录了。第三种就是将windows上的目录挂载到li...原创 2018-10-01 12:31:44 · 91400 阅读 · 17 评论 -
sendto 返回errnor 1,错误码1 Operation not permitted
使用udp套接字发送失败,返回-1,错误码为1,ping操作显示Operation not permitted这个是防火墙导致的,使用iptables关掉防火墙去就没问题。iptables -F原创 2018-11-22 22:13:22 · 5838 阅读 · 0 评论 -
释放skb buffer指针引出的指针传递问题
内核一个转发模块,在做IPv4转IPv6的时候,对原来的IPv4报文指针进行了释放操作,然后新建一个skb buffer存储IPv6报文,使用kfree_skb释放掉旧的IPv4skb后直接将新的IPv6 SKB指针传递给了指向旧的指针(如下),结果引起了内核奔溃。struct sk_buff *skb, skb_cp;/* 创建一个新的skb buffer */skb_cp =...原创 2019-01-09 08:43:21 · 493 阅读 · 2 评论 -
Golang 编译MIPS helloworld程序出现 Illegal instruction 或者helloworld: applet not found 的解决
编译helloworld程序在MIPS平台上跑出现上述错误。增加了软浮点编译选项就好了GOMIPS=hardfloat: use floating point instructions (the default)GOMIPS=softfloat: use soft floating point完整的编译命令:#!/bin/shexport PATH=$PATH:/usr/l...原创 2019-01-15 17:18:18 · 1944 阅读 · 1 评论 -
c语言命令行选项处理函数getopt和getopt_long() 函数使用
经常接触Linux的同学应该有这样的体验,当遇到一个不会使用的命令时通常敲一下xCmd -h或者xCmd --help来获取命令提示,例如tcpdump命令或者iptables命令,像这样的选项仅仅是获取提示帮助的,实现起来不会很难,但如果考虑到一些复杂的选项,比如说下面这条命令:iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/...原创 2019-02-24 22:20:51 · 746 阅读 · 0 评论 -
c语言调用shell命令一 popen使用以及获取命令返回值
产品升级,新增网卡,原先的产品是arm平台,新网卡是mips平台,需要开发网卡的配置程序,该程序原计划是以守护进程的形式后台执行,不过测试过程中发现系统不是特别稳定,导致程序时不时奔溃下,一时半会儿无法解决,只能先给该程序加个壳,以系统调用的方式来执行,如果出现问题的话重复调用就可以了。 以前在程序里调用系统命令的话,使用的是system()函数,不过system函数无法...原创 2019-02-26 21:47:39 · 5883 阅读 · 0 评论 -
Linux内核和应用层程序通信get/setsockopt示例
最近开发一个realtek网卡配置程序,基于realtek提供的一套配置程序代码开发,分析代码的时候发现用户层和驱动之间传递消息是使用的是setsockopt、getsockopt,这个对我来说比较新鲜,以前见到的大都是netlink、proc等等,使用这种方式特别简单,应用层这边只需要创建套接字,而内核层只需要注册一个struct nf_sockopt_ops 结构体就可以了,这种方式以后可能会...原创 2019-03-03 17:32:21 · 1282 阅读 · 0 评论 -
Linux平台定时监控进程退出并自动重启的方法
1.使用crontab机制增加定时检查任务,比如说写一个监控脚本,定时执行,如果程序退出了就再次拉起来。2.另一种就是使用/etc/inittab机制,在inittab里新增一行,使用respawn(该进程只要终止就立即重新启动)标识。相较于第一种,inittab是一种系统级别,效率会更高点,它会立即拉起而不是等到一定时间。下图中最后一行的意思就是当acld进程退出后,立即...原创 2019-04-11 17:37:42 · 2251 阅读 · 0 评论 -
Linux环境编程 用户层定时器使用一 timerfd的使用
timerfd是linux提供的定时器机制,基于文件描述符,定时器精度最高可达纳秒级别,接口包括定时器创建、启动定时器、关闭定时器和删除定时器。下面介绍一下timerfd API接口和一个结合epoll使用的定时器demo。1. 创建定时器 #include <sys/timerfd.h>/* * 功能 : 创建定时器 * 返回值:成功返回定时器文件描述符,失败返回-...原创 2018-06-11 22:33:09 · 2502 阅读 · 0 评论