CSAPP第八章:讀書筆記
阿新 • • 發佈:2019-02-16
[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;
}