日常收藏与小记

目录

      • 1、Linux环境下段错误的产生原因及调试方法小结
      • 2、Ubuntu重装桌面以及vbox虚拟机进入命令行
        • 2.1 重装桌面
        • 2.2 vbox虚拟机进入命令行
      • 3、栈、堆和常量区在代码中的区别
      • 4、strlen使用注意事项
      • 5、tcp套接字api调用
      • 6、字符集和字符编码
      • 7、cp命令保留文件属性复制库链接文件
      • 8、\r\n和CR/LF的意思
      • 9、编译时库的链接优先级
      • 10、curl命令
      • 11、Linux释放内存
      • 12、关于指针的初始化
      • 13、xml中node和element的区别
      • 14、几种拨号方式的区别(Gobinet/QMI-WWAN/ppp拨号)
      • 15、一个网卡如何实现同时访问多个网关
      • 16、获取以太网MAC地址
      • 17、adb工具下载

1、Linux环境下段错误的产生原因及调试方法小结

Linux环境下段错误的产生原因及调试方法小结
博客园的一篇文章,对段错误原因和调试方法讲的还不错

2、Ubuntu重装桌面以及vbox虚拟机进入命令行

2.1 重装桌面

sudo apt-get install --reinstall ubuntu-desktop
sudo reboot

2.2 vbox虚拟机进入命令行

vbox如果按ctrl+alt,就会切换到主机下,使用右边的ctrl(也叫HOST键)可以替代这个组合,即按 ‘右ctrl+f1’ 即可。

3、栈、堆和常量区在代码中的区别

直接上代码

#include 
#include 
#include 

#define getmem 3    //1,stack; 2,heap; 3,const

#if getmem == 1	//stack
char *GetString(void){
	char array[6] = "hello";

	return array;
}

#elif getmem == 2	//heap
char *GetString(void){
	char *array;
	char buf[6] = "hello";
	
    array = malloc(sizeof(buf));
    strcpy(array, buf);
    
	return array;
}

#elif getmem == 3	//const
char *GetString(void){
	char *array = "hello";

	return array;
}
#endif

void main()
{
	char *pstr = NULL;
	
	pstr = GetString();
	printf("%s\n", pstr);
}

运行会发现
栈在出了函数之后就不可用了,程序运行会出错
堆和常量,在出了函数后仍可被使用

4、strlen使用注意事项

strlen在没有发现 \0 前会一直查找下去,然后返回 \0 之前的字符长度。
所以如果用strlen查询不确定的字符串长度,可能导致意外的无限循环。

5、tcp套接字api调用

日常收藏与小记_第1张图片

6、字符集和字符编码

字符集(Character set)
字符的集合,每个字符集包含的字符个数不同,常见字符集:

ASCII字符集
GB2312字符集
BIG5字符集
GB18030字符集
Unicode字符集等

字符编码
比如UTF-8,就是Unicode字符集的编码方式

二者区别
字符集是书写系统字母与符号的集合。
字符编码则是将字符映射为一特定的字节或字节序列,是一种规则。

字符集和字符编码对应关系

字符集 字符编码
ASCII ASCII
GB2312 GB2312
GBK GBK
GB18030 GB18030
Unicode UTF-8、UTF-16、UTF-32

7、cp命令保留文件属性复制库链接文件

比如拷贝带有soft-link的so文件时, 加上-d参数就可以保留链接文件的属性了,而不会去复制了链接的原始库文件,命令如下:

cp -d  libXXX.so*  $DEST_DIR

8、\r\n和CR/LF的意思

\r是回车,英文是Carriage Return,简称CR作用:使光标到行首
\n是换行,英文是New Line或者是Line Feed,简称LF,作用:换到新行

9、编译时库的链接优先级

系统路径中如果有跟编译选项-L路径中的同名库,哪个更优先呢?优先级如下:

1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib;
5.默认的动态库搜索路径/usr/lib.

同时可以指定程序运行时,从哪个目录搜索动态库,具体是用 -rpath 选项,如:

-Wl,-rpath=/mnt/app/

10、curl命令

1、利用curl下载http文件

curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

//62M
curl -OL http://xmp.down.sandai.net/xmp/XMPSetup6.1.7.810xmpdl.exe

//108M
curl -OL http://forspeed.rbread01.cn/down/VirtualBox-5.2.16-123759-Win.exe

//450M
curl -OL http://forspeed.rbread01.cn/down/newdown/4/26/VMwareworkstation.rar


2、curl命令详解,可以参考[http://www.linuxdiyf.com/linux/2800.html](http://www.linuxdiyf.com/linux/2800.html)

11、Linux释放内存

释放 echo 3 > /proc/sys/vm/drop_caches
  0:0是系统默认值,默认情况下表示不释放内存,由操作系统自动管理
  1:释放页缓存
  2:释放dentries和inodes
  3:释放所有缓存

如果现在想让操作系统重新分配内存,那么设置drop_caches的值为0即可

12、关于指针的初始化

如果定义指针的时候,指针指向一个有空间的数据,这时不需要分配空间;
如果要给指针赋值,则需要分配内存空间。

13、xml中node和element的区别

一张图解释
日常收藏与小记_第2张图片

14、几种拨号方式的区别(Gobinet/QMI-WWAN/ppp拨号)

拨号还有NDIS、ECM,暂时没做介绍。
参考:https://blog.csdn.net/u010164190/article/details/79096184

1.Gobinet拨号
GOBI 高通Gobi无线宽带芯片技术,只需一个模块即可支持多种移动宽带网络和众多移动运营商.
高通公司称全新的芯片将基于Gobi 4G LTE无线基带、MDM9615和MDM9215。这种技术可以在FDD和TDD网络下进行LTE连接,同时支持HSPA+和EV-DO网络、2G/3G网络。这意味着用户可以在本地使用高速4G LTE网络,在其他地方使用3G网络。Gobi平台在MDM芯片组的基础上还提供了软件增强层,这样可以使用不同技术下的无线连接更简单。

2.QMI-WWAN协议拨号
QMI: Qualcom Message Interface
MSM: Mobile station mode
AP: Application Procesor

高通平台目前都是非对称多核心,最主要的是AP和Modem。
两个处理器怎么进行通信呢,我们把AP和Modem当作两个主机,问题就变得了很简单,TCP/IP协议不是一种非常成功的进程间跨主机通信方式。高通没有采用这种方式,但是借鉴了TCP/IP的框架设计。
Qualcomm MSM Interface,作用用于AP和BP侧的交互,通俗说法就是让设备终端TE(可以是手机,PDA,计算机)
对高通BP侧的AMSS系统进行操作,如调用函数,读取数据,设置其中的NV项等。
参考:http://blog.csdn.net/u012439416/article/category/7004974

3.ppp协议拨号:点对点协议
PPP(点到点协议)在拨号过程中用于MS和PC间数据交互、协商。在拨号流程的初期首先开启的就是PC和MS直接的PPP过程,在拨号成功后,还需要依靠PPP协议对IP包进行封装传输数据。
官网源码:https://ppp.samba.org

15、一个网卡如何实现同时访问多个网关

添加静态路由即可,命令如下(需管理员权限):

route add 172.16.80.0 mask 255.255.255.0 192.168.225.1 -p

查看路由信息

route print

删除静态路由

route delete 172.16.80.0 mask 255.255.255.0 192.168.225.1 -p

所有需要发往172.16.80.0/16地址段的IP数据包,全部由192.168.225.1路径转发。
-p表示重启仍旧有效

格式就是`route add 目标网段 mask 掩码 下一跳地址`

目标网段必须是非直连网段,即172.16.80.*中的*要是0
下一跳地址必须是直连网段,所以目标网段和下一跳一定不是同段地址。

16、获取以太网MAC地址

代码如下:

static BOOLEAN GetEthernetMacAddress(char *ver)
{
    FILE    *mac;
    char    str[32] = {0};
 
    strcpy(ver,"00:00:00:00:00:00");
    mac = popen("cat /sys/class/net/eth0/address","r");
 
    if(mac != NULL){
        if(fgets(str,sizeof(str),mac) != NULL){
            strcpy(ver,str);
        }
        pclose(mac);
        return true;
    }
    return false;
}

17、adb工具下载

ref:https://blog.csdn.net/liuxinfa/article/details/82878816
以下是adb工具包最新Google官方版下载地址:

ADB和Fastboot for Windows

https://dl.google.com/android/repository/platform-tools-latest-windows.zip

ADB和Fastboot for Mac

https://dl.google.com/android/repository/platform-tools-latest-darwin.zip

ADB和Fastboot for Linux

https://dl.google.com/android/repository/platform-tools-latest-linux.zip

由于这些是直接的 Google 链接,用户可以确保下载不仅是官方的,而且将始终能够获得最新版本的 ADB 和 Fastboot 。

你可能感兴趣的:(工具技巧)