linux下开发遇到的问题集合

 记录在linux下开发遇到的各种问题,方便以后查找。

 

1.关于shell中脚本的执行方式:在当前脚本执行还是启动一个新的shell进程来执行脚本。

假设当前目录下有脚本script.sh

启动一个新的shell进程来执行:

这是shell中默认的执行方式是启动一个新的shell进程(子进程)来执行脚本,即sh script.sh或者赋予script.sh执行权限后直接执行脚本:./script.sh

 

在当前shell执行:

有时需要在当前shell执行脚本,比如脚本中涉及到修改shell的环境变量时,需要这样执行(否则修改的将是新启动的子shell进程的环境变量):

source script.sh或者 .  script.sh(注意点 . 后面有空格,然后才是脚本路径)。

 

2.修改shell的环境变量。

见:http://blog.csdn.net/cnctloveyu/archive/2009/12/25/5075128.aspx

 

3.添加用户为sudoer

       推荐以root用户使用visudo命令(有的版本提供的是sudoedit),添加一行:        

xxxx ALL=(ALL)  ALL

其中,xxxx为要添加的用户名,保存就OK

         另外,也可以采用以root用户编辑/etc/sudoers,也是添加xxxx ALL=(ALL)  ALL,但注意该文件默认为只读。

 

4.vi的常用操作

http://blog.csdn.net/lazyclough/archive/2009/11/15/4811862.aspx

  

5.bash中常用快捷键

见:http://blog.csdn.net/cnctloveyu/archive/2009/12/25/5076017.aspx

 

6.编译别人写好的代码出现某些函数找不到时(尤其是条件编译的部分),首先考虑从配置文件上寻求解决办法,尽量不要去修改源代码。

 

2009-12-30 

7.vim的相关:

1)安装配置vim,已经记录

 

2)vim2个小技巧:

vim中插入一个文件的内容:

:r filename

vimctrl-w的用法:先按住ctrlw,然后松开,然后按其他键。

 

 

 2010-01-05

8.关闭Fedora SELinux的方法:

修改/etc/selinux/config文件中的SELINUX="" disabled ,然后重启。

如果不想重启系统,使用命令setenforce 0

详见:http://blog.csdn.net/cnctloveyu/archive/2010/01/05/5135025.aspx

 

9.Broadcom的板子上使用CFE作为bootloader的帮助使用:

如要查询ifconfig的帮助:

help ifconfig

附:常用的ifconfig使用:

ifconfig eth0 –auto(自动配置,需要网关有dhcp

或者 ifconfig eth0 –addr=x.x.x.x –mask=x..x..x..x(addripmask为掩码)

 

10.查看网络、端口:

netstat命令:如可以使用netstat –al查看所有的socket

详见:http://blog.csdn.net/cnctloveyu/archive/2010/01/05/5135196.aspx

 

 

 2010-01-06

 

11.shell中给变量赋值,切记在“=”的两端均不能有空格,否则shell会认为没有赋值。

2010-01-07

12.某SDK中的一段关于手动内存对齐的源码:

#define ALIGN_4096   (4096 - 1)

uint8_t *p=malloc(bufSize + ALIGN_4096);

p=(uint8_t *)(((unsigned long)p + ALIGN_4096) & ~ALIGN_4096);

假定机器是字节寻址,uint_t8位的无符号整数的话,上面的3条语句将会使指针p的内存地址按4k字节对齐。

上述语句的效果:

如果p% 4096=0p不变;

如果p% 4096<>0p=(p/4096 + 1)*4096;(等式中的/是整数除法,结果取整)。

P.S.:上面的第二条语句保证了每次分配的空间都不小于4k,也就不会有2个不同的地址被对齐到相同的地址了。

 

 2010-01-21

 

13.linux中网络同步时间:

  ntpdate  x.x.x.x
  x.x.x.xntp时间服务器的地址,如
  210.72.145.44(中国国家授时中心服务器IP地址)
  s2h.time.edu.cn 四川大学网络管理中心
  203.117.180.36
  ntp.sjtu.edu.cn(上海交通大学网络中心NTP服务器地址)

 

14.段错误小结:

  常见的段错误:指针访问越界pthread线程库相关。首先考虑指针访问越界,确定指针访问没有任何问题之后再考虑其他。
  这里主要说说指针访问越界:
1.       数组访问越界;
2.       使用未正确初始化的指针;
3.       试图使用已经回收的资源,如使用libcurl库时,已经使用global_clean等回收了资源,还试图访问资源(比如多线程情况下,先clean再结束还在使用libcurl资源的线程……发生段错误!)
 

15.共享变量(或者全局变量)的初始化:

对于多个函数或者线程共享的变量,需要确保在每次需要对该变量做初始化时使用相同初始值,对于变量的可能取值已经确定并且有限的情况,最好使用enum或者一组常量来表示该变量的可能取值,并且用一个函数来对该变量进行初始化,确保每次初始化动作相同。(对于有多个需要共享的变量或者多次需要初始化时尤为重要,可以防止错误的初始化带来的错误。)

 

16.使用pthread线程库的小问题:

1.认真谨慎地考虑线程间的同步问题;

2.如果需要在线程阻塞时取消线程,需要设置线程的取消属性为异步:

  使用pthread_setcanceltype函数

4.       pthread的线程结束函数:pthread_cancel只是给线程发送结束的信号,具体的动作由收到该信号的线程设置来定。注意使用之前先判断线程的PID是否合法。

 

17.C语言杂项:

1.调试程序时,可以在printf语句中使用C标准中预定义的宏:__LINE____FILE__,输出语句所在的行号和文件

2.宏定义中如果包含多条语句应该使用do-while循环包裹语句:

    do{     }while0);

    以防止宏的副作用。

 

18.2个用到的库:

  libcurl一个强大的HTTP操作库,减少自己使用socket的麻烦,主页:

http://curl.haxx.se/

  libmad一个开源的高精度 MPEG 音频解码库:

           使用方法:

http://blog.csdn.net/knight8267/archive/2009/09/03/4513830.aspx

 

 

 2010-01-26

19.关于C、C++中的const的一点小实验:

      http://blog.csdn.net/cnctloveyu/archive/2010/01/26/5258700.aspx

你可能感兴趣的:(linux,shell,脚本,服务器,vim,2010)