Linux進程環境

Linux下C程序都是main開始的,main函數的原型是:數組

int main(int argc, char **argv)

其中argc是命令行參數的數目,argc是指向參數的各個指針所構成的數組。函數

 

進程終止

C程序中有3個函數用於正常終止一個進程,_exit和_Exit當即進入內核,exit則作一些清理工做後後進入內核,好比清理IO緩衝區數據,對於全部打開的流進行close操做。 這3個函數都帶一個整型參數,成爲終止狀態。spa

#include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status);

 

atexit函數命令行

atexit函數用來登記終止處理函數,按照ISO C的規定,一個進程最多能夠登記32個函數,這些函數將由exit函數自動調用。進程終止時,exit首先調用各終止函數,而後關閉打開的流。3d

#include <stdio.h>
int atexit(void (*func)(void));

使用atexit函數登記進程終止函數:指針

#include <stdio.h>

void my_exit1(void)
{
    printf("my_exit1\n");
}

void my_exit2(void)
{
    printf("my_exit2\n");
}

int main(int argc, char **argv)
{
    atexit(my_exit1);
    atexit(my_exit2);

    printf("hello world\n");

    return 0;
}

輸出結果:code

 

進程環境表

每一個進程都有一個環境表,與參數表同樣,環境表也是一個指針數組:對象

一般用getenv和putenv函數來訪問特定的環境變量,而不是environ變量。可是,若是要查看整個環境,則必須使用environ指針。blog

 

C程序的存儲空間

任何程序的內存空間均可分爲4個基本部分,各個部分的首地址是固定的。進程

  • 正文段 這是CPU執行的機器指令部分
  • 數據段(初始化數據段/非初始化數據段)
  • 堆 一般在堆中動態分配存儲
  • 棧 自動變量以及每次函數調用時所需保存的信息都存放在此段中

 

存儲空間分配

C程序中有3個用於空間動態分配的函數:

  • malloc:分配指定字節數的存儲區,此存儲區的初始值不肯定。
  • calloc:爲指定數量指定長度的對象分配存儲空間,該空間每一位都初始化爲0。
  • realloc:增長或減小之前分配區的長度,當增長長度時,若是該分配區後面有相鄰的足夠空間,則直接在後面的臨近空間分配;不然將之前分配區的內容轉移到另外一額足夠大的區域中。
相關文章
相關標籤/搜索