最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送

 更新時(shí)間:2024年01月08日 09:49:36   作者:年少輕狂且縱馬  
這篇文章主要為大家詳細(xì)介紹了c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在之前的文章c++ signal 發(fā)送信號(hào)中,只是說明了給指定進(jìn)程發(fā)送信號(hào),而無法攜帶數(shù)據(jù),今天說明下如果和指定進(jìn)程發(fā)送信號(hào),同時(shí)可以攜帶簡(jiǎn)單數(shù)據(jù)。

1. 發(fā)送端使用的接口

int sigqueue(pid_t pid, int sig, const union sigval value);

參數(shù)說明

@pid:給指定進(jìn)程的pid

@sig:發(fā)送的信號(hào),為如下1-64

 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    

 @value:主要為下邊的聯(lián)合體賦值,簡(jiǎn)單的整形可以通過sival_int 直接賦值,其他大的數(shù)據(jù),則需要通過將地址賦值給sival_ptr。

union sigval {
    int   sival_int;
    void *sival_ptr;
};

返回值:

成功返回0,否則返回-1

2. 接收端使用的接口

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

參數(shù)說明:

@signum: 則為接收的信號(hào),與發(fā)送時(shí)的信號(hào)保持一致

@act:主要用來注冊(cè)我們的接收函數(shù)

@oldact:一般設(shè)置為NULL

struct sigaction {
   void     (*sa_handler)(int);       
   void     (*sa_sigaction)(int, siginfo_t *, void *);
   sigset_t   sa_mask;
   int        sa_flags;
   void     (*sa_restorer)(void);
};

@@sa_handler:  // 只是接收信號(hào)的函數(shù)

@@sa_sigaction:// 接收信號(hào),而且接收攜帶的數(shù)據(jù),同時(shí)設(shè)置sa_flags為SA_SIGINFO

@@sa_mask: 用來設(shè)置處理函數(shù)是否阻塞

這里只是簡(jiǎn)單說明下,詳細(xì)問問度娘

發(fā)送端使用示例

#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
 
 
 void DoCmdGetPid(const std::string& cmd, std::string& stringPid)
 {
   FILE *pFile = popen(cmd.c_str(), "r");
   char *buff = new char[256];
   memset(buff, 0, sizeof(buff));
   fread(buff, 1, sizeof(buff), pFile);
   stringPid = buff;
   pclose(pFile);
   delete[] buff;
 }
 
 void SendSig()
 {
   const std::string& procName = "recv";
   std::string cmd = "ps -a | grep " + procName + " |grep -v grep | awk '{print $2}'";
   std::string strPid;
   DoCmdGetPid(cmd, strPid);
 
   if (strPid.empty()) {
       std::cout << "not process\n";
       return;
    }
 
    union sigval sv;
    sv.sival_int = 66;
 
    int res = sigqueue(std::stoi(proc_pid), 38, sv);
    printf("res:%d\n", res);
 
    
   return;
 }
 
 int main()
 {
   while (1) {
     SendSig();
     sleep(5);
   }
 
   return 0;
}

接收端使用示例

#include <signal.h>
#include <unistd.h>
#include <iostream>
 
void signal_handler(int s, siginfo_t* pSi, void* ucontext)
{
	if (SIGRTMIN + 4 == s) {
		std::cout << "recv sig38\n";
		printf("value:%d\n", pSi->si_value.sival_int);
		printf("value:%d\n", pSi->si_int);
	}
}
 
int main()
{
	struct sigaction act;
	act.sa_sigaction = signal_handler;
	act.sa_flags = SA_SIGINFO;
 
	if (sigaction(SIGRTMIN + 4, &act, nullptr) < 0) {}
 
	while(true) {
		std::cout << "waiting signal..." << std::endl;
		sleep(3);
	}
 
	return 0;
}

到此這篇關(guān)于詳解c++中signal信號(hào)攜帶數(shù)據(jù)的接收與發(fā)送的文章就介紹到這了,更多相關(guān)c++ signal攜帶數(shù)據(jù)的接收與發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++基于hook iat改變Messagebox實(shí)例

    C++基于hook iat改變Messagebox實(shí)例

    這篇文章主要介紹了C++基于hook iat改變Messagebox的方法,以實(shí)例形式展示了針對(duì)IAT(即導(dǎo)入地址表)以及hook的操作,有助于深入理解Windows程序設(shè)計(jì)原理,需要的朋友可以參考下
    2014-10-10
  • C++實(shí)現(xiàn)FTP綜合應(yīng)用詳解

    C++實(shí)現(xiàn)FTP綜合應(yīng)用詳解

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)FTP綜合應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++實(shí)現(xiàn)猜牌小游戲

    C++實(shí)現(xiàn)猜牌小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)猜牌小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 一文解密C++中的多態(tài)機(jī)制

    一文解密C++中的多態(tài)機(jī)制

    眾所周知C++語言的三大特性:封裝、多態(tài)、繼承,其中多態(tài)就是去完成某個(gè)行為,但是會(huì)根據(jù)不同的對(duì)象產(chǎn)生不同的狀態(tài),下面小編就來帶大家深入了解一下C++的多態(tài)機(jī)制吧
    2023-07-07
  • C++游戲教程基本技巧之隨機(jī)化詳解

    C++游戲教程基本技巧之隨機(jī)化詳解

    在小游戲的制作中時(shí)常常會(huì)要用到隨機(jī)數(shù),這篇文章就來和大家談?wù)凜++中這個(gè)所謂的“隨機(jī)”。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-11-11
  • C語言實(shí)現(xiàn)反彈球小游戲

    C語言實(shí)現(xiàn)反彈球小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)反彈球小游戲,利用函數(shù)寫的C語言小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++中策略模式和工廠模式的區(qū)別

    C++中策略模式和工廠模式的區(qū)別

    這篇文章介紹了C++中策略模式和工廠模式的區(qū)別,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    C語言從基礎(chǔ)到進(jìn)階全面講解數(shù)組

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計(jì)算機(jī)內(nèi)存里連續(xù)存放,地址編號(hào)最低的存儲(chǔ)單元存放數(shù)組的起始元素,地址編號(hào)最高的存儲(chǔ)單元存放數(shù)組的最后一個(gè)元素
    2022-05-05
  • 關(guān)于C++內(nèi)存中字節(jié)對(duì)齊問題的詳細(xì)介紹

    關(guān)于C++內(nèi)存中字節(jié)對(duì)齊問題的詳細(xì)介紹

    本篇文章是對(duì)C++內(nèi)存中字節(jié)對(duì)齊的問題進(jìn)行了詳細(xì)的分析與總結(jié)。需要的朋友參考下
    2013-05-05
  • 使用VC++實(shí)現(xiàn)打印乘法口訣表

    使用VC++實(shí)現(xiàn)打印乘法口訣表

    本文給大家分享的是一個(gè)超級(jí)簡(jiǎn)單的小例子,使用vc++打印乘法口訣表,給需要的小伙伴參考下吧。
    2015-03-03

最新評(píng)論

土默特右旗| 马边| 申扎县| 定日县| 湟中县| 卢氏县| 宁德市| 自贡市| 金昌市| 普兰店市| 柳州市| 华安县| 东平县| 曲麻莱县| 兴和县| 库尔勒市| 上虞市| 原阳县| 长岭县| 贵定县| 木兰县| 宁蒗| 视频| 平度市| 和龙市| 阳泉市| 孝昌县| 高碑店市| 普兰县| 恩施市| 抚远县| 盐边县| 仪陇县| 乌拉特前旗| 随州市| 乌拉特中旗| 江安县| 汉阴县| 宁津县| 蓝田县| 诸暨市|