原始碼 訊號可靠訊號不可靠訊號相關

2021-07-28 13:05:31 字數 2855 閱讀 2351

/* 

* file: main.c

* author: luv letter

* * created on 2023年3月14日, 下午4:33

*/#include #include #include #include /*

3、訊號可靠訊號不可靠訊號相關

程式設計程式,要去實現如下功能:

父程序建立子程序1和子程序2、子程序1向子程序2傳送可靠訊號,並傳送額外資料為子程序1的pid*2;

子程序2接受可靠訊號的值,並傳送給父程序,父程序把接受的值進行列印。

*/void my_sigaction(int signum, siginfo_t *st, void *dat)

else if (sigrtmin == signum) //並將資料傳送給父程序 }

}int main(int argc, char** argv)

pid_t pid1, pid2;

///// pid1

///pid1 = fork();

if (-1 == pid1)

else if (0 == pid1) // 子程序 1

else

}printf("pid1: 開啟檔案成功\n");

// 這裡需要字串轉數字

char revbuf[32] = ;

while (1)

else

}if (null == fp)

ret = system("rm -rf pid.txt");

if (-1 == ret)

pid2 = atoi(revbuf);

printf("pid1: 轉化 pid2 為整數成功 = %d\n", (int )pid2 );

union sigval value;

value.sival_int = ((int)pid2) * 2;

printf("pid1: value.sival_int = %d\n", value.sival_int);

ret = sigqueue((pid_t)pid2, sigrtmin, value);

if (-1 == ret)

printf("子程序退出...\n");

exit(0);

} ///

// pid2

///pid2 = fork();

if (-1 == pid2)

else if (0 == pid2) // 子程序 2

act.sa_sigaction = my_sigaction;

ret = sigaction(sigrtmin, &act, null);

if (-1 == ret)

// 1 儲存自己的pid, 給子程序使用

// 這個用檔案儲存

file *fp = null;

char pid_buf[18] = ;

fp = fopen("pid.txt", "w+");

if (null == fp)

printf("pid2: 開啟檔案成功...pid2 = %d\n", (int)getpid());

int pid = (int )getpid();

sprintf(pid_buf, "%d", pid);

printf("pid2: pid2 = %s\n", pid_buf);

ret = fputs(pid_buf, fp);

if (eof == ret)

if (null != fp)

printf("pid2: child 2 wait for 5 sec ...\n");

int n = 5;

while (n)

printf("pid2: 子程序 2 退出\n");

exit(0);

} printf("parent wait for 10 sec\n");

int i = 10;

while (i)

wait(pid1);

wait(pid2);

return (exit_success);

}

另一套方法

/*

pid_t pidarray[10];

void my_sigaction(int signum, siginfo_t *st, void *dat)

else if (sigrtmin+2 == signum)

else if (sigrtmin+3 == signum)

else

}int main(void)

ret = sigaction(sigrtmin+2, &act, null);

if (-1 == ret)

ret = sigaction(sigrtmin+3, &act, null);

if (-1 == ret)

int i = 0;

pid_t pid = 0;

for (i = 0; i < 2; i++)

else if (0 == pid)

}// 父程序

if (pid > 0)

// 子程序 1

if (0 == pid && 0 == i)

// 子程序 2

if (0 == pid && 1 == i)

sleep(2);

pid_t mypid = 0;

while (1) }

return 0;

}*/

24 可靠訊號與不可靠訊號

以下整理 自 1 1 可靠訊號與不可靠訊號 1 訊號值小於 sigrtmin red hat 7.2 中,sigrtmin 32 sigrtmax 63 的訊號都是不可靠訊號。主要問題如下 程序每次處理訊號後,就將對訊號的響應設定為預設動作。在某些情況下,將導致對訊號的錯誤處理 因此,使用者如果不希...

學習筆記 可靠訊號 不可靠訊號

不可靠訊號pk可靠訊號 q linux訊號機制基本上是從unix系統中繼承過來的。早期unix系統中的訊號機制比較簡單和原始,後來在實踐中暴露出一些問題,它的主要問題是 q 程序每次處理訊號後,就將對訊號的響應設定為預設動作。在某些情況下,將導致對訊號的錯誤處理 因此,使用者如果不希望這樣的操作,那...

訊號及訊號處理(二) 可靠訊號與不可靠訊號

一 可靠訊號與不可靠訊號有哪些?sighup 1號 至 sigsys 31號 之間的訊號都是繼承自unix系統,是不可靠訊號,也稱為非實時訊號 sigrtmin 33號 與 sigrtmax 64號 之間的訊號,它們都是可靠訊號,也稱為實時訊號 二 什麼是可靠訊號?可靠性是指訊號是否會丟失,即該訊號...