常用知识点(二)

1.软件错误常见原因

权限问题,配置问题,写入失败问题

 

2.查看端口使用情况

netstat -anp

 

3.开启关闭服务

ntsysv

 

4.补丁

生成补丁文件:diff -rc A B > test.patch

一般A是原始文件,B是修改后的文件,test.patch称为A的补丁文件

-c 可以标识出不同之处的上下文环境,更有利于提高patch命令的识别能力

-c, -C NUM, --context[=NUM]
output NUM (default 3) lines of copied context

 

-r递归

-r, --recursive
recursively compare any subdirectories found

 

打补丁:patch -pN <test.patch

N表示忽略掉xxx.patch文件里目录信息里前面的第几个斜线

 

5.在ubuntu中查看已经安装的软件

dpkg -l | grep package-name

 

6.tar解压时同时使用大C参数指定解压后的文件存放的目录

tar -xzvf xxx.tar.gz -C /xxx/xxx

 

7.动态库

生成动态库:gcc  -fpic -shared -o libfunc.so func.c

-fpic 指定生成位置无关代码(position independent code)

-shared 指定生成动态库

-o指定动态库名字

 

以上是一步生成动态库的过程,也可以先生成.o文件,再生成动态库

gcc -fpic -c func.c

gcc -fpic -shared -o libfunc.so func.o

 

使用动态库

在使用动态库前,如果动态库不在系统标准库路径下(/lib, /usr/lib 等),就需要指定LD_LIBRARY_PATH,否则运行时是找不到库的。

gcc -o test test.c -L. -lfunc

-L指定库所在目录

-l指定库名字

("-L" 及"-l" 参数一定要放在func.c后面,否则编译报找不到func定义)

 

 

静态库

生成静态库:ar -cr libfunc.a func.c

-c创建(do not warn if the library had to be created)

-r把文件插到目标文件中,已有的就替换,没有的就生成(replace existing or insert new file(s) into the archive)

 

以上是一步生成静态库的过程,也可以先生成.o文件,再生成静态库

gcc -c func.c

ar -cr libfunc.a func.o

 

使用静态库:gcc -o test test.c -L. -lfunc

 当静态库和动态库同名时, gcc命令将优先使用动态库。

 (建议先生成.o文件再生成动态库或者静态库)

8.改变android tsc2007触摸屏滑鼠模式为单击模式

添加 "设备名.idc" 配置文件

 

9.tar -xzvf xxx.tar.gz -C /xxx/xxx

-C 指定解压文件的存放目录

 

10.在命令行下使用cscope,如果想退出,按ctrl+z;

按tab键从已找到的列表跳转到查找命令选项

 

11.加载vmci.ko和vmhgfs.ko后,使用mount -t vmhgfs .host:/ /mnt/hgfs 挂载PC共享目录(前提是共享目录选项已经选上)

如果想开机自动挂载:
vim /etc/rc.d/rc.local

sudo mount -t vmhgfs .host:/ /mnt/hgfs

 

12.secureCRT 使用telnet不能连接问题

确保 eth*可用,centOS ip与主机在同一网段

安装 telnet、telnet-server、xinetd

在ntsysv里把telnet加入开机启动项,重启即可

 

13.secureCRT不能使用ssh2登陆问题

确保eth*可用,如果不可用,编译vmare-tools的vmxnet-only,加载相关驱动,便可可找到eth*,继而使用ssh2连接

 

14.在eclipse唤出代码提示:Alt+/ (和linux 里的Tab一样)

15.快速注释一块代码
先选中要注释的代码块,然后按住Ctrl+Shift+/

 

16.临界区

  每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。

进程进入临界区的调度原则是:
  ①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。

  ②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。

  ③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。

  ④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

 

17. man 1 2 3

1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]

 

e.g:

man 2 open

OPEN(2) Linux Programmer's Manual OPEN(2)

NAME
open, creat - open and possibly create a file or device

SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);

DESCRIPTION...

 

18. secureCRT 登录虚拟机,老是断线

1) 关闭360安全卫士 、360杀毒

2)在pc主机上允许secureCRT及vmWare通过防火墙

3)在ubuntu里关闭防火墙

sudo ufw disable
4)Ubuntu系统上安装、启动sshd服务

sudo apt-get install openssh-server

sudo /etc/init.d/ssh restart

5)关闭adsafe

 

19. 修改dos 窗口大小

左上角右键,属性-布局--屏幕缓冲区大小--宽度(默认80),改这个就能改变最大化的宽度

 

20.使用SecureCRT时,偶尔发生屏幕假死,不能输入等情况。

后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。

 

21.vim 括号匹配跳转操作:  

  1. % 跳转到相配对的括号  
  2. gD 跳转到局部变量的定义处  
  3. '' 跳转到光标上次停靠的地方, 是两个', 而不是一个"  
  4. mx 设置书签,x只能是a-z的26个字母  
  5. `x 跳转到书签处("`"是1左边的键)  
  6. > 增加缩进,"x>"表示增加以下x行的缩进  
  7. < 减少缩进,"x<"表示减少以下x行的缩进  
  8. { 跳到上一段的开头  
  9. } 跳到下一段的的开头  
  10. ( 移到这个句子的开头  
  11. ) 移到下一个句子的开头  
  12. [[ 跳转至上一个函数(要求代码块中'{'必须单独占一行)  
  13. ]] 跳转至下一个函数(要求代码块中'{'必须单独占一行)  
  14. C-] 跳转至函数或变量定义处  
  15. C-O 返回跳转前位置   
  16. C-T 同上   
  17. nC-T 返回跳转 n 次  
  18. 0 数字0,跳转至行首   
  19. ^ 跳转至行第一个非空字符   
  20. $ 跳转至行尾  

 

22.c的#和##
#符号把一个符号直接转换为字符串,例如:
#define STRING(x) #x
const char *str = STRING( test_string );    str的内容就是"test_string",也就是说#会把其后的符号直接加上双引号。

##符号会连接两个符号,从而产生新的符号,例如:
#define SIGN( x ) INT_##x
int SIGN( 1 ); 宏被展开后将成为:int INT_1;

 

 



 

posted @ 2015-11-03 20:33  wssheng  阅读(222)  评论(0编辑  收藏  举报