操作系统

大端序和小端序

''' 操作系统中内存都是从小(低)到大(高)排列的,就像看文字一样,从前(左)到后(右),是一个习惯上的行为(规定)。 当数据存储在内存中,由于操作系统环境的不同,对数据的管理/存储方式可能也有所不同,分为大端和小端两种模式,两者区别如下。 (1)小端:低地址存储数据低字节,高地址存储数据高字节,大部分操作系统为小端;(如:CentOS、Ubuntu、Win10) (2)大端:低地址存储数据高字节,高地址存储数据低字节,存储和显示(人所看到)在数据方向上一致。 '''

检测脚本:

def endian_check_v1():
    import sys
    print(f"本机存储模式是 {sys.byteorder.capitalize()} Endian.\n")


def endian_check_v2():
    import struct

    val = 0x12345678
    pk = struct.pack('i', val)
    hex_pk = hex(pk[0])
    if hex_pk == '0x78':
        print('小端')
    elif hex_pk == '0x12':
        print('大端')
#include <stdio.h>
#include <iostream>
//#include <Windows.h>
using namespace std;

typedef unsigned char UCHAR;

//x的y次方
long pow(int x, int y)
{
    long nValue = 1;
    while(y-- > 0) nValue *= x;
    return nValue;
}

int main()
{
    cout << "类型长度:" << " short-" << sizeof(short) << " int-" << sizeof(int) 
        << " long-" << sizeof(long) << " long long-" << sizeof(long long) << endl;

    long nValue = 0x12345678;//16进制,12→34→56→78从前到后为高字节到低字节
    printf("变量地址: %p\n", &nValue);
    long nRealValue = 0;
    for(int i=8; i>=1; i--)//16进制转10进制
    {
        nRealValue += (i*pow(16, 8-i));
    }
    cout << "变量大小: " << nRealValue << endl;

    UCHAR *p = (UCHAR*)&nValue;//字符指针p指向变量地址(即变量在内存中存储的第一个低地址字节)
    printf("地址和值:");
    for(int i=0; i<sizeof(long); i++)
    {
        printf(" %p-%02x", p+i, *(p+i));
    }

    //判断大小端(内存地址固定为从低到高,大端:低地址保存高字节,小端:低地址保存低字节)
    cout << endl << "判断结果: ";
    if((*p == 0x78) && (*(p+1)==0x56))
    {
        cout << "小端" << endl;
    }
    else if((*p == 0x12) && (*(p+1)==0x34))
    {
        cout << "大端" << endl;
    }
    else
    {
        cout << "未知" << endl;
    }

    getchar();
    return 0;
}

Mac OS

osascript命令

osascript命令很好玩,可以试试

自定义系统通知:

osascript -e 'display notification "通知内容" with title "标题" subtitle "子标题"'

更多玩法

Mac命令显示文件夹的大小

在Terminal中查看当前目录下所有文件(包含文件夹)大小。

du -hs *
du -shc *

第二个命令能在最后显示一个Total大小,即当前目录的总大小

Linux

常用命令

命令 作用
top 用于实时显示 process 的动态。

杀死进程

Linux:
kill -9 pid_number   # 这个kill信号无法被程序处理,会执行强制杀死

Mac OS:
kill -9 pid_number  
kill pid_number

Windows:
taskkill.exe /F /PID pid_number

什么是core dump

Core的意思是内存, Dump的意思是扔出来, 堆出来.

开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考. core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.