1. 程式人生 > >CSAPP第八章:讀書筆記

CSAPP第八章:讀書筆記

[1]前面講了異常流的處理。

[2]程序的概念,fork()一次,返回兩次。子程序返回的是0,父程序返回的是子程序的pid。看一個例子:

這裡寫圖片描述

很明顯子程序會輸出x=2,x=0,而父程序則會輸出x=0.

[3]waitid,用來掛起指定程序直到該程序返回:如果指定的pid=-1,那麼則指定程序是當前所有程序的子程序。看一個例子:

這裡寫圖片描述

很明顯這裡有三種輸出:bacc,abcc,acbc.書上答案有誤。

再看一個wait_pid的例子:

這裡寫圖片描述

經過分析可知程式一定會輸出6行,順序如下即可:

這裡寫圖片描述

[4]訊號的接受,這裡面的訊號其實也是作業系統提供的,比如ctlr+c就會發出一種型別的訊號,我們可以改變預設訊號的處理方式來實現我們自己的訊號:比如像下面這樣就處理了按Cltr+C的訊號,注意在IDE上按兩次就直接退出,但是直接用命令列是沒有問題的。

#include<stdio.h>
#include<signal.h>
#include <windows.h>

void sig_handler(int signo)
{
    if (signo == SIGINT)
        printf("received SIGINT\n");
}

int main(void)
{
    if (signal(SIGINT, sig_handler) == SIG_ERR)
        printf("\ncan't catch SIGINT\n");
    // A long long wait so that we can easily issue a signal to this process
while (1) Sleep(1); return 0; }