/*
* 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號 之間的訊號,它們都是可靠訊號,也稱為實時訊號 二 什麼是可靠訊號?可靠性是指訊號是否會丟失,即該訊號...