工作笔记之杂七杂八

一、在多线程中,如果有全局变量和函数中的局部变量同名,则如果所在线程不退出,则局部变量一直有效,导致全局变量不可用;

二、守护进程daemon不能用gdb调试,但可以使用syslog服务,将出错信息写入指定文件;

三、管道文件不属于任何文件系统,而且只存在于内存中,但FIFO在文件系统中可见;

四、kill()向外发送信号,raise()不仅可以向外发送,还可以向自己发送信号;

五、信号处理函数sigaction比signal好;

六、线程退出用pthread_exit,而不能用exit,否则整个进程下线程全部被关闭;pthread_cancel用于一个线程关闭另一个线程;

七、PV原子操作(信号量)用于互斥操作时,往往只设置一个信号量sem,而用于同步操作时,则设置初始值不同的多个信号量,用来实现顺序执行;

八、关于typedef,不管何时,只要为指针声明typedef,都要在typedef中间加上const,使得指针本身是常量,而不是对象,注意区别:typedef char *p 与 typedef const char *p;

九、typedef int (*PF) (const char *, const char *)可以将int (*Register (int (*pf)(const char *, const char *)))(const char *, const char *)精简为PF Register(PF pf);

十、关于IP地址转换,一般用两种接口:inet_pton (新,支持IPV6)和inet_addr (旧,点分十进制转相关格式),推荐使用前者inet_pton;

十一、TCP是无记录边界的字节流协议,因此在传递数据时,并不是一次性完整传完,需要使用循环,让read不停的读取,直到read返回0为止或者返回负值,但UDP不同,每个UDP数据报都有一定的长度,可以认为一个数据报就是一条记录;

十二、errno是系统自带的全局变量,不需要定义,直接使用;

十三、size_t的作用是屏蔽不同平台的差异,原型为unsigned int;

十四、TCP通过给所发送数据的每一个字节关联一个序列号进行排序,如有2048个字节,TCP将其拆成2个分节(分节是TCP传递给IP层的数据单元),第一个分节的序列号为1~1024,第二个分节为1025~2048,这样就算非序到达也可以重排;

十五、TCP连接是全双工的,即同一时间既可以读也可以写;

十六、如何用char保存数字65535,只要定义char a[2],赋值a[0]=255,a[1]=255,需要显示时,只要将其强制类型转换为(int *)即可;

十七、Linux标准函数库中没有整形转字符串的函数,所以使用sprintf进行格式转换,如:

    int port=9999;

    char port2[20];

    sprintf(port2, "%d", port1);

十八、如何将两个char放入一个int中,采用int = char1 | (int) char2 << 8即可;

十九、%p用于打印16位地址;

二十、UDP是无连接的,所以每次传输数据时,内核都会自动分配IP和端口来暂时连接套接口,事后断开,因此如果要给同一个目的地址发送大量数据报,使用connect效率会更高,因为不用连接很多次 (如果使用connect,就不能使用sendto和recvfrom了);

二十一、使用系统调用mkdir接口时,会遇到实际生成的文件夹权限与预期不符,原因是由于系统环境umask的干扰,所以需要在调用mkdir之前先调用umask(0)来消除影响;

二十二、/lib64/libc.so.6: version 'GLIBC_2.14' not found 是因为系统glibc版本太低,两种方法解决,一是升级系统glibc的版本,二是编译程序时指定glibc的版本为低版本,我选第二种,具体方法如下:
首先查看APP Glibc 兼容性.看当前app使用了哪些Glibc版本.

objdump -p libalgrms.so
[root@localhost lib]# objdump -p libalgrms.so 
 
libalgrms.so:     file format elf64-x86-64
 .....
 
Version References:
  required from libc.so.6:
    0x06969194 0x00 04 GLIBC_2.14
    0x0d696914 0x00 03 GLIBC_2.4
    0x09691a75 0x00 02 GLIBC_2.2.5

然后查看当前app引用了GLIBC_2.14中哪些函数

nm libalgrms.so | grep GLIBC_2.14
[root@localhost lib]# nm libalgrms.so | grep GLIBC_2.14
                 U memcpy@@GLIBC_2.14


也可以使用 objdump 查看app动态引用符号表.

objdump -T libalgrms.so | grep GLIBC_2.14

[root@localhost lib]# objdump -T libalgrms.so | grep GLIBC_2.14  
0000000000000000      DF *UND*    0000000000000000  GLIBC_2.14  memcpy

上例显示app引用 2.14 版本中的memcpy函数. 
下面将用到 gcc 的一个特性实际上是ld的特性.可以将引用符号绑定到一个特定版本.只需在.c文件中写入类似代码.
__asm__(“.symver original_foo,foo@VERS_1.1″);
即可.

查找当前系统glibc版本中memcpy的各个版本.

获取libc.so实际路径.
# gcc --print-file-name=libc.so  
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so  
# file /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so  
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so: ASCII text  
-bash-4.1# cat /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so  
/* GNU ld script  
   Use the shared library, but some functions are only in 
   the static library, so try that secondarily.  */  
OUTPUT_FORMAT(elf64-x86-64)  
GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a  AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) )  
-bash-4.1# file /lib64/libc.so.6  
/lib64/libc.so.6: symbolic link to `libc-2.16.so'

获取memcpy版本信息.
-bash-4.1# nm /lib64/libc-2.16.so |grep memcpy  
...  
000000000008a6d0 i memcpy@@GLIBC_2.14  
0000000000084ab0 i memcpy@GLIBC_2.2.5  
...
可以看出memcpy最低版本是(“@GLIBC_2.2.5″)2.2.5,而默认使用版本是2.14(“@@GLIBC_2.14″) 这里我们只要将 glibc 2.14 版本memcpy降到glibc 2.2.5. 在源代码写入以下代码
__asm__(“.symver memcpy,memcpy@GLIBC_2.2.5″);
重新编译.

再次查看app信息.
#objdump -p app  
...     
   
Version References:  
  required from libc.so.6:  
    0x0d696913 0x00 04 GLIBC_2.3  
    0x0d696914 0x00 03 GLIBC_2.4  
    0x09691a75 0x00 02 GLIBC_2.2.5
 
发现当前版本需求已不再需要glibc 2.14支持.
# objdump -T app |grep memcpy  
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memcpy
memcpy已完全修改为Glibc 2.2.5支持.

二十三、

递归指定类型文件遍历其中内容的方法

grep "xxx" * -Rn 常常会把tags中的东西也抓取出来,实在很不好,文件多了简直就是眼花撩乱啊!

比如你指想查 .h 或者.c 或者.cpp中的一种 怎么办呢 grep "xxx" *.c -Rn 递归显然不行...

使用下面这种:
find . -name *.cpp | xargs -i grep "xxx" {} --color -RnH
就可以实现,当然有的人喜欢用下面这种
find . -name "*.cpp" -exec grep "xxx" --color -RnH {} \;
我们主要讲下蓝色的部分,利用xargs -i很关键 这样{} 才会起到占位符的作用,{}代表的是xargs很多参数中的一个,对他们进行迭代处理;

后面讲下参数 --color 这个没什么 就是显示颜色 ls也是这样, R表示递归 n表示显示行号 H表示显示文件名 h小写不显示文件名。

二十四、

文件夹软连接的方法:ln -s /mnt/hgfs/ /home/luo/   (解释:将hgfs文件夹链接放入到luo目录下)  注意后面的“/” 是将目录里所有的文件链接过去,必须加上,否则,建立的目录显示颜色异常,还不能正常访问,如cd 进不去

二十五、

动态增加目录大小的方法:mount -t tmpfs -o size=100M none /path(该方法是通过分出100M内存空间给目录,而不是从磁盘划分,这样做速度快,但注意内存的剩余大小,不要影响正常运行)

二十六、

简单的增加开机运行行为的方法:编辑/etc/rc.local文件,在最后加入shell脚本路径或shell命令即可


二十七、

在64位的linux上运行32位的程序
  症状
(1)执行bin文件时提示:No such file or directory
(2)ldd bin文件  的输出为: not a dynamic executable
(3)file bin文件 的输出显示程序是32位

  解决
debian上只要安装 ia32-libs这个包(apt-get install ia32-libs)就可以了。
$ sudo apt-get install ia32-libs
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 ia32-libs : 依赖: ia32-libs-i386 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install ia32-libs


二十八、

生成ubuntu的文件系统

debootstrap --arch i386 trusty fs_ubuntu_trusty/

其中,trusty表示ubuntu的版本,fs_ubuntu_trusty是为了存储文件系统而生成的文件夹


二十九、

根文件系统和linux内核版本有五个方面的联系:
1、需要用相同的编译器。
2、kernel中必须配置对根文件系统类型的支持:你的kernel中必须支持yaffs
3、kernel中对flash的分区,必须和实际情况一致。
4、bootloader传给kernel的参数必须要和实际情况一致
5、bootloader中定义的机器ID必须和kernel中定义的一致


三十、

查看系统硬盘空间占用情况

du -h --max-depth=1 /


三十一、

fedora切换根用户
su - root

三十二、

ubunut有时网络不通的解决办法:
Solving the Ubuntu 12.04 Update Error: (-5 - No address associated with hostname)
Step 1: Go to System –> Preferences –> Network Connections.
Step 2: Next, select your default Network Interface (eth0) and click ‘Edit’.
Step 3: Then select ‘IPv4 Settings’ and choose ‘Automatic (DHCP) addresses only’.
Step 4: Next, enter the new DNS server addresses in the ‘DNS servers’ box. Use commas to separate multiple addresses and click ‘Apply’ to save.
Step 5: Choose your preferred DNS details

三十三、

apt包安装和卸载

安装
sudo aptitude install kchmviewer-nokde
删除
sudo aptitude remove kchmviewer-nokde

三十四、

pivot_root和chroot的主要区别是,pivot_root主要是把整个系统切换到一个新的root目录,而移除对之前root文件系统的依赖,这样你就能够umount原先的root文件系统。而chroot是针对某个进程,而系统的其它部分依旧运行于老的root目录。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL DBA 工作笔记 PDF 是一份记录 MySQL 数据库管理员(DBA)在工作中的笔记的 PDF 文档。这份笔记包含了 DBA 在日常工作中遇到的各种问题、解决方案、优化技巧以及其他相关的经验和知识。 这份工作笔记对于 MySQL DBA 的工作非常有价值。首先,它可以记录下 DBA 遇到的各种问题,不论是关于性能、安全性还是其他方面的问题,这对于以后的参考和解决同样问题非常有帮助。其次,笔记中记录的解决方案和优化技巧可以帮助 DBA 在日常工作中更好地处理数据库问题,提高数据库的性能和可靠性。此外,这份笔记还可以帮助新加入团队的 DBA 快速了解和适应工作环境,减少工作上的学习曲线。 这份工作笔记的 PDF 格式具有很多优势。首先,PDF 格式具有良好的兼容性,可以在各种操作系统和设备上进行查看和编辑。其次,PDF 格式具有良好的保密性,可以设置密码来限制访问和编辑权限,保护笔记中的敏感信息不被泄露。此外,PDF 格式还具有可搜索性,可以方便地通过关键词搜索和查找特定的笔记内容。 总之,MySQL DBA 工作笔记 PDF 是一份非常有价值的工作文档,对于 MySQL DBA 在日常工作中的问题解决和知识积累都起到了很大的帮助作用。它不仅记录了 DBA 的经验和技术,还可以方便地分享和传递给团队中的其他成员,提高整个团队的工作效率和数据库管理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值