linux 散知识点

来源:互联网 发布:网络喊麦最火的歌曲 编辑:程序博客网 时间:2024/06/08 03:27
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
2

以下关于交叉编译器概述正确的是(A)

A)交叉编译器一般按照CPU类型分类,不同的CPU就有不同的交叉编译器

B)交叉编译器的速度比其他编译器的速度要快

C)linux开发环境中的交叉编译器不是gcc编译器

D)交叉编译器编译出来的目标文件一般也能在开发机(普通PC)上运行

3

Traceroute是一个正确理解IP网络并了解路由原理的重要工具

Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。

4
    char str[] = "Hello";
    char *p = str;
    printf("sizeof(str) : %d\n", sizeof(str));
    printf("sizeof(A) : %d\n", sizeof("A"));
    printf("sizeof('A') : %d\n", sizeof('A'));
    printf("strlen(str) : %d\n", strlen(str));
    printf("sizeof(str) : %d\n", sizeof(p));

结果:
sizeof(str) : 6
sizeof(A) : 2
sizeof('A') : 4
strlen(str) : 5
sizeof(str) : 8

5
find . -path "./dirname" -prune -o -name "*.dll" -print
不包含某个目录, 去查找文件

find . -path "./mvconfigs" -prune -o -type  f -print | wc -l
不包含某个目录, 统计所有的文件

另外说几个常用的参数:
-exec 是将查找到的文件执行命令(-exec command {} \;)
-ok    与-exec相同,只不过操作前要询问用户
-user   按文件属主查找
-group 按文件数组查找
-mtime 按文件更改时间查找
-atime  按文件访问时间查找
-ctime  按文件创建时间查找


6
指针的概念
     一个变量在内存中所占存储单元的地址号就是该变量的指针。
如:int i;
        i=20;
假设i变量在内存中所占存储单元的地址号为:1000 ,此时称1000这个存储地址为变量i的指针,而20是变量i的值。
2.8.1.1 指针变量的定义
     专门存放其他变量地址的变量称为指针变量。和其他变量的定义类似,指针变量在使用前也必须定义其类型。其定义的一般形式为:
   类型标识符号  *指针变量名表
如:  int i=50;
          int *ip;
说明:
(1)指针变量名前面的‘*’表示该变量为指针变量,它不是变量名本身的一部分。
(2)此处的类型标识符是该指针变量所要指向的变量的类型。

指针与函数
     前面讲过,函数的参数可以为整型、实型、字符型等普通变量。实参与形参间参数的传递是单向的“值传递”。
    但函数的参数也可为指针,它的作用是将一个变量的地址传给被调函数的形参。此时主调函数的调用点上的实参必须是地址值(指针),而被调函数的形参一定要定义成指针变量的形式
   此时,被调函数的形参得到的是实参的指针,因此,该形参变量就指向实参,在被调函数中对形参的操作就相当于对它所指向的实参的操作


7
函数的指针
一个函数在内存中的起始地址就是该函数的指针。
在C++中,函数的名称就代表了该函数的指针。
指向函数的指针变量的一般定义形式为:
    数据类型标识符  (*指针变量名)( );
  在C++语言中,指针变量可以指向普通变量,它也可以指向函数。

#include "iostream.h"
int max(int x, int y);   //声明被调函数max
void main()
{       int a,b,c;
        cin>>a>>b;
        c=max(a,b);
        cout<<c;  }     
int  max(int x,int y)
{       int z;
        if(x>y)
           z=x;
        else
           z=y;
        return(z);  }

如果改用指向函数的指针变量的话,则main函数为:
 void   main()
    { int (*p)();   //定义了一个指向返回值为int型的函数的  
            指针变量p  
       int a,b,c;
       p=max;          //将函数max的首地址(即指针)赋  
                 给指针变量p
        cin>>a>>b;
        c=(*p)(a,b);
        cout<<c;
      }

说明:
(1)int (*p)() 说明了一个指向返回值为整型数据的函数的指针。
(2)p=max 表示把函数的入口地址赋给指针变量p,那么*p就是函数max.因此c=(*p)(a,b);和c=max(a,b)等价。
注意:
(1)函数的调用可以通过函数名调用,也可通过函数指针调用。
(2)int (*p)();只是表示定义了一个指向函数的指针变量。
(3)在函数指针变量赋值时,只须给出函数名,不必给出参数: 如:p=max; 因为只是传递函数的地址。
(4)对指向函数的指针做象p+n,p++,p—等算数运算是无意义的。



0 0