一些实用技巧与备忘

一些实用技巧与备忘

Linux 下的一些工具使用技巧

Linux 下查看进程端口号

netstat 查看时, 某些端口 OS 会显示不出来, 可以用 lsof 命令:

lsof -Pnl +M -i4 | grep LISTEN

GCC 查看系统宏定义

可以利用gcc的编译命令, 查看C的源文件扩展.

gcc -dM -E "c-file"

GDB 的一些小技巧

  1. set print pretty on 打开打印 pretty 开关, 在打印结构体时带缩进.
  2. disassemble 显示当前的汇编. disassemble /r 汇编带上机器码.
  3. info reg 显示寄存器的值.

SecureCRT 的一些小技巧

  • 保持链接: options -> global options -> General -> Default Session, 点击 Edit default settings 按钮, 在 Terminal 中钩上 Send protocol NO-OP, every 30 seconds.
  • 鼠标复制: options -> global options -> Terminal 钩上Copy on select, 并钩上 paste on middle button. 这样在secrecrt中用鼠标选中一段字符, 就可以直接复制到剪切板, 按鼠标中间的齿轮完成复制粘贴.
  • 常用快捷键:
    • ctrl + a: 移动光标到行首
    • ctrl + e:移动光标到行尾
    • ctrl + d:删除光标之后的一个字符
    • ctrl + w:删除行首到当前光标所在位置的所有字符
    • crtl + k:删除当前光标到行尾的所有字符

Linux iptables 开端口

Linux 一般通过 iptables 来管理开放端口, 修改 iptables 规则:

iptables -I INPUT -p tcp --dport 22 -j ACCEPT
/etc/rc.d/init.d/iptables save
service iptables restart

或者直接修改 /etc/sysconfig/iptables, 加上一行:

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

然后重启iptables即可.

其他备忘

memcpy 和 memmove

曾经测试过 Linux 下的 memcpy 和 memmove 性能, 平均下来 memcpy 会稍微快, 根据 size 不同会有些差异.

这两天修改了之前写的一个缓冲区的实现,这个缓冲区有个“排干”的操作,需要做一次内存拷贝,把缓冲区中的数据拷贝到头上,因为拷贝的数据可能会 overlap,所以只能 memmove。后来根据同事的经验,将做“排干”的策略做了调整,只有在缓冲区头上的留白超过一半 size 的时候才做“排干”,这个策略最初的目的是为了避免频繁的“排干”,但是有个超出预期的好处,就是可以保证“排干”拷贝内存时,不在可能有 overlap 的情况,所以就可以优化成 memcpy,提升稍许性能。

至于 memcpy 为什么比 memmove 快,可以参照源码实现: memmove 会检查一下是否有 overlap,在 dst < src 或者 dst >= src + size 时 FWD copy,否则就认为有 overlap,做 BWD copy。每次 copy 的时候,会调用汇编代码,按照位、字长或者页长来做拷贝,提高效率。memcpy 则直接 FWD 拷贝了。

TCP 缓冲区的设置

TCP 的缓冲区可以通过 SO_SNDBUF和SO_RCVBUF 来设置发送和接受缓冲区,这个缓冲区需要在建立连接之前设置,建立连接的时候, 连接双方会通过握手的过程获得对方的缓冲区 size.

具体来说,就是 client 需要在 connect 调用之前设置, server 需要在 listen 之前调用。如果在 connect 或者 listen 之后再设置缓冲区大小,因为 TCP 连接都建立好了,也就没有意义了。那么 accept 出来的 fd 呢?这个其实就是 listen 之前 server 设置的缓冲区大小,不需要再次设置,再次设置也是一样没有意义的。

strict weak order

stl 的一个需要注意的地方:重载比较函数时,遵循 strict weak order,即如果相等返回 false。在 std::sort 的 comp 参数说明中, 明确要求了这一点。更深入的理解可以参考这里.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小程序容器

OpenApplus小程序容器

OpenApp+ (https://www.openapplus.com)一个小程序容器,配置简单、功能完善、界面流畅、开箱即用!使用OpenApp+可以快速扩...

5079
来自专栏西安-晁州

vuejs、eggjs、mqtt全栈式开发设备管理系统

vuejs、eggjs、mqtt全栈式开发简单设备管理系统 业余时间用eggjs、vuejs开发了一个设备管理系统,通过mqtt协议上传设备数据至web端实时展...

2.4K7
来自专栏程序员的诗和远方

使用compass自动拼css sprite

css sprite (css 雪碧)又叫css精灵,是一种图片拼合技术。多用在图标上,把几个图标拼成一个图片,页面加载的时候只需要load拼好的图片,然后使用...

2704
来自专栏java相关

dotfiles项目

812
来自专栏林德熙的博客

win10 uwp Markdown 输入需求文件文件格式文件类保存设置界面拼写检查云创建Html创建pdfGit

输入标题方式可以使用快捷键,也可以手动输入“#”,一个“#” 表示一级标题,两个个“#” 表示二级标题,三个“#” 表示三级标题,其他表示多级标题。

953
来自专栏卡少编程之旅

类webpack模板的多页Vue项目模板

5966
来自专栏java相关

非常全面的vim配置文件

1743
来自专栏前端

前后端分离ueditor富文本编辑器的使用-Java版本

最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的u...

1.3K10
来自专栏有趣的django

Django搭建blog网站(一)

一、前言 1.1.环境 python版本:3.6 Django版本:1.11.6 1.2.预览效果 最终搭建的blog的样子,基本上满足需求了。框架搭好了,至于...

8048
来自专栏企鹅号快讯

使用技巧精讲

1、快速建立连接 单击顶部活动菜单栏上的“快速建立连接按钮”(Alt+Q),如图1 图1 单击按钮后,弹出图2所示的窗口 ? 图2 Protocol:默认SSH...

2145

扫码关注云+社区