• 常用知识点(二)


    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;

     

     



     

  • 相关阅读:
    GIT基础详解
    JS进阶解析
    JS基础解析
    CSS布局模型解析
    02.CentOS Linux 7.7 系统配置文档
    docker 创建bridge网络和修改默认网段
    selenium浏览器自动化测试工具 进阶使用
    前端导出Excel和打印介绍
    stm32使用gmtime()转换timestamp为日期,出的结果是乱的,不符合预期。改为localtime正常输出
    .net core api action 不能用作 httpget注释的参数名
  • 原文地址:https://www.cnblogs.com/thinkinglife/p/4934142.html
Copyright © 2020-2023  润新知