多進(jìn)程編程知識(shí)匯總(附代碼例子)

嵌入式ARM 2023-06-15 12:00

一、什么是進(jìn)程?

1、進(jìn)程和線程的區(qū)別

進(jìn)程是指正在運(yùn)行的程序,它擁有獨(dú)立的內(nèi)存空間和系統(tǒng)資源,不同進(jìn)程之間的數(shù)據(jù)不共享。進(jìn)程是資源分配的基本單位。

線程是進(jìn)程內(nèi)的執(zhí)行單元,它與同一進(jìn)程內(nèi)的其他線程共享進(jìn)程的內(nèi)存空間和系統(tǒng)資源。線程是調(diào)度的基本單位。

2、進(jìn)程的創(chuàng)建和銷毀

在Linux中啟動(dòng)一個(gè)進(jìn)程有多種方法:

(1)通過system函數(shù)啟動(dòng)進(jìn)程。(使用簡單,效率較低)

#include?

/**
?*?@brief?執(zhí)行系統(tǒng)命令調(diào)用命令處理器來執(zhí)行命令
?*
?*?Detailed?function?description
?*
?*?@param[in]?command:?包含被請(qǐng)求變量名稱的?C?字符串
?*
?*?@return 如果發(fā)生錯(cuò)誤,則返回值為?-1,否則返回命令的狀態(tài)。
?*/

int?system(const?char?*command);
例子:通過system函數(shù)啟動(dòng)一個(gè)進(jìn)程,列出當(dāng)前目錄下的文件及文件夾。
#include?
#include?

int?main(void)
{
????system("ls");
????printf("ls?end\n");

????return?0;
}

(2)通過fork函數(shù)啟動(dòng)進(jìn)程。(用于啟動(dòng)子進(jìn)程)

#include?
#include?

/**
?*?@brief?fork系統(tǒng)調(diào)用用于創(chuàng)建一個(gè)子進(jìn)程
?*
?*?Detailed?function?description
?*
?*?@param[in]
?*
?*?@return 如果發(fā)生錯(cuò)誤,則返回值為?-1,否則返回命令的狀態(tài)。
?*/

pid_t?fork(void);
例子:通過fork函數(shù)啟動(dòng)子進(jìn)程
#include?
#include?
#include?
#include?

int?main(void)?
{
????pid_t?res?=?fork();

????///
????if?(res?==?0)?
????{
????????printf("res?=?%d,?I?am?child?process.?pid?=?%d\n",?res,?getpid());
????????exit(EXIT_SUCCESS);???///
????}?
????///
????else?if?(res?>?0)?
????{
????????printf("res?=?%d,?I?am?parent?process.?pid?=?%d\n",?res,?getpid());

????????int?child_status?=?0;
????????pid_t?child_pid?=?wait(&child_status);???///
????????printf("Child?process(pid?=?%d)?has?been?terminated,?child_status?=?%d\n",?child_pid,?child_status);
????}?
????///
????else?
????{
????????printf("Fork?failed.\n");
????????exit(EXIT_FAILURE);
????}
????return?0;
}
編譯、運(yùn)行:
我們使用了fork()系統(tǒng)調(diào)用來創(chuàng)建一個(gè)新進(jìn)程。如果fork()返回值為0,則說明當(dāng)前進(jìn)程是子進(jìn)程;如果返回值大于0,則說明當(dāng)前進(jìn)程是父進(jìn)程。在父進(jìn)程中,我們使用wait()系統(tǒng)調(diào)用來等待子進(jìn)程結(jié)束。當(dāng)子進(jìn)程結(jié)束后,父進(jìn)程會(huì)繼續(xù)執(zhí)行。

(3)通過exec系列函數(shù)啟動(dòng)進(jìn)程。(用于啟動(dòng)新進(jìn)程,新進(jìn)程會(huì)覆蓋舊進(jìn)程)

#include?

/**
?*?@brief?啟動(dòng)新進(jìn)程,新進(jìn)程會(huì)覆蓋舊進(jìn)程
?*
?*?Detailed?function?description
?*
?*?@param[in]?path:?所執(zhí)行文件的路徑
?*?@param[in]?file:?所執(zhí)行文件的名稱
?*?@param[in]?arg:?傳入的參數(shù)列表,以NULL作為結(jié)束
?*?@param[in]?envp:?傳入的環(huán)境變量
?*
?*?@return 如果發(fā)生錯(cuò)誤,則返回值為?-1,否則返回命令的狀態(tài)。
?*/

int?execl(const?char?*path,?const?char?*arg,?...);
int?execlp(const?char?*file,?const?char?*arg,?...);
int?execle(const?char?*path,?const?char?*arg,?...,?char?*const?envp[]);
int?execv(const?char?*path,?char?*const?argv[]);
int?execvp(const?char?*file,?char?*const?argv[]);
int?execve(const?char?*path,?char?*const?argv[],?char?*const?envp[]);
例子:通過execl()函數(shù)的參數(shù)列表調(diào)用了ls命令程序
#include?
#include?

int?main(void)
{
????execl("/bin/ls",?"ls",?"-la",?NULL);
????printf("ls?end\n");
????return?0;
}
execl()函數(shù)的參數(shù)列表調(diào)用了ls命令程序,與在終端上運(yùn)行”ls -la”產(chǎn)生的結(jié)果是一樣的。

在Linux中終止一個(gè)進(jìn)程有多種方法:

  • 從main函數(shù)返回。(正常終止)
  • 調(diào)用exit()函數(shù)終止。(正常終止)
  • 調(diào)用_exit()函數(shù)終止。(正常終止)
  • 調(diào)用abort()函數(shù)終止。(異常終止)
  • 由系統(tǒng)信號(hào)終止。(異常終止)

二、進(jìn)程間通信方式

進(jìn)程間通信是指在不同進(jìn)程之間傳播或交換信息的一種機(jī)制。每個(gè)進(jìn)程各自有不同的用戶地址空間,任何一個(gè)進(jìn)程的全局變量在另一個(gè)進(jìn)程中都看不到,所以進(jìn)程之間要交換數(shù)據(jù)必須通過內(nèi)核,在內(nèi)核中開辟一塊緩沖區(qū),進(jìn)程A把數(shù)據(jù)從用戶空間拷到內(nèi)核緩沖區(qū),進(jìn)程B再從內(nèi)核緩沖區(qū)把數(shù)據(jù)讀走,內(nèi)核提供的這種機(jī)制稱為進(jìn)程間通信。

進(jìn)程間通信的目的:

  • 傳輸數(shù)據(jù)。比如進(jìn)程 A 負(fù)責(zé)生成數(shù)據(jù),進(jìn)程 B 負(fù)責(zé)處理數(shù)據(jù),數(shù)據(jù)需要從 A 進(jìn)程傳輸至 B 進(jìn)程。
  • 共享資源。比如進(jìn)程 A 與進(jìn)程 B 共享某一塊內(nèi)存資源。
  • 模塊化。將系統(tǒng)功能劃分為多個(gè)進(jìn)程模塊進(jìn)行開發(fā),方便開發(fā)維護(hù)。
  • 加速計(jì)算。多核處理器環(huán)境,一個(gè)特定進(jìn)程劃分為幾個(gè)進(jìn)程并行運(yùn)行。

Linux IPC(Inter-process Comminication, 進(jìn)程間通信)的方式:

1、消息隊(duì)列

內(nèi)核中的一個(gè)優(yōu)先級(jí)隊(duì)列,多個(gè)進(jìn)程通過訪問同一個(gè)隊(duì)列,進(jìn)行添加結(jié)點(diǎn)或者獲取結(jié)點(diǎn)實(shí)現(xiàn)通信。

POSIX消息隊(duì)列頭文件:

#include????????????/*?For?O_*?constants?*/
#include?????????/*?For?mode?constants?*/
#include?

編譯鏈接需要加上 -lrt 鏈接。

消息隊(duì)列API接口:

/**
?*?@brief?創(chuàng)建消息隊(duì)列實(shí)例
?*
?*?Detailed?function?description
?*
?*?@param[in]?name:?消息隊(duì)列名稱
?*?@param[in] oflag:根據(jù)傳入標(biāo)識(shí)來創(chuàng)建或者打開一個(gè)已創(chuàng)建的消息隊(duì)列
????????????????????-?O_CREAT:?創(chuàng)建一個(gè)消息隊(duì)列
????????????????????-?O_EXCL:?檢查消息隊(duì)列是否存在,一般與O_CREAT一起使用
????????????????????-?O_CREAT|O_EXCL:?消息隊(duì)列不存在則創(chuàng)建,已存在返回NULL
????????????????????-?O_NONBLOCK:?非阻塞模式打開,消息隊(duì)列不存在返回NULL
????????????????????-?O_RDONLY:?只讀模式打開
????????????????????-?O_WRONLY:?只寫模式打開
????????????????????-?O_RDWR:?讀寫模式打開
?*?@param[in] mode:訪問權(quán)限
?*?@param[in] attr:消息隊(duì)列屬性地址
?*
?*?@return?成功返回消息隊(duì)列描述符,失敗返回-1,錯(cuò)誤碼存于error中
?*/

mqd_t?mq_open(const?char?*name,?int?oflag,??mode_t?mode,?struct?mq_attr?*attr);

/**
?*?@brief?無限阻塞方式接收消息
?*
?*?Detailed?function?description
?*
?*?@param[in]?mqdes:?消息隊(duì)列描述符
?*?@param[in] msg_ptr:消息體緩沖區(qū)地址
?*?@param[in] msg_len:消息體長度,長度必須大于等于消息屬性設(shè)定的最大值
?*?@param[in] msg_prio:消息優(yōu)先級(jí)
?*
?*?@return?成功返回消息長度,失敗返回-1,錯(cuò)誤碼存于error中
?*/

mqd_t?mq_receive(mqd_t?mqdes,?char?*msg_ptr,?size_t?msg_len,?unsigned?*msg_prio);

/**
?*?@brief?指定超時(shí)時(shí)間阻塞方式接收消息
?*
?*?Detailed?function?description
?*
?*?@param[in]?mqdes:?消息隊(duì)列描述符
?*?@param[in] msg_ptr:消息體緩沖區(qū)地址
?*?@param[in] msg_len:消息體長度,長度必須大于等于消息屬性設(shè)定的最大值
?*?@param[in] msg_prio:消息優(yōu)先級(jí)
?*?@param[in] abs_timeout:超時(shí)時(shí)間
?*
?*?@return?成功返回消息長度,失敗返回-1,錯(cuò)誤碼存于error中
?*/

mqd_t?mq_timedreceive(mqd_t?mqdes,?char?*msg_ptr,?size_t?msg_len,?unsigned?*msg_prio,?const?struct?timespec?*abs_timeout);

/**
?*?@brief?無限阻塞方式發(fā)送消息
?*
?*?Detailed?function?description
?*
?*?@param[in]?mqdes:?消息隊(duì)列描述符
?*?@param[in] msg_ptr:待發(fā)送消息體緩沖區(qū)地址
?*?@param[in] msg_len:消息體長度
?*?@param[in] msg_prio:消息優(yōu)先級(jí)
?*
?*?@return?成功返回0,失敗返回-1
?*/

mqd_t?mq_send(mqd_t?mqdes,?const?char?*msg_ptr,?size_t?msg_len,?unsigned?msg_prio);

/**
?*?@brief?指定超時(shí)時(shí)間阻塞方式發(fā)送消息
?*
?*?Detailed?function?description
?*
?*?@param[in]?mqdes:?消息隊(duì)列描述符
?*?@param[in] msg_ptr:待發(fā)送消息體緩沖區(qū)地址
?*?@param[in] msg_len:消息體長度
?*?@param[in] msg_prio:消息優(yōu)先級(jí)
?*?@param[in] abs_timeout:超時(shí)時(shí)間
?*
?*?@return?成功返回0,失敗返回-1
?*/

mqd_t?mq_timedsend(mqd_t?mqdes,?const?char?*msg_ptr,?size_t?msg_len,?unsigned?msg_prio,?const?struct?timespec?*abs_timeout);

/**
?*?@brief?關(guān)閉消息隊(duì)列
?*
?*?Detailed?function?description
?*
?*?@param[in]?mqdes:?消息隊(duì)列描述符
?*
?*?@return?成功返回0,失敗返回-1
?*/

mqd_t?mq_close(mqd_t?mqdes);

/**
?*?@brief?分離消息隊(duì)列
?*
?*?Detailed?function?description
?*
?*?@param[in]?name:?消息隊(duì)列名稱
?*
?*?@return?成功返回0,失敗返回-1
?*/

mqd_t?mq_unlink(const?char?*name);
消息隊(duì)列基本API接口使用例子:發(fā)送進(jìn)程給接收進(jìn)程發(fā)送測試數(shù)據(jù)。

send.c:

#include?
#include?
#include?
#include?
#include????????????/*?For?O_*?constants?*/
#include?????????/*?For?mode?constants?*/
#include?

#define?MQ_MSG_MAX_SIZE????512??///
#define?MQ_MSG_MAX_ITEM????5??///

static?mqd_t?s_mq;

typedef?struct?_msg_data
{

????char?buf[128];
????int?cnt;
}msg_data_t;


void?send_data(void)
{
????static?int?cnt?=?0;
????msg_data_t?send_data?=?{0};

????cnt++;
????strcpy(send_data.buf,?"hello");
????send_data.cnt?=?cnt;
????int?ret?=?mq_send(s_mq,?(char*)&send_data,?sizeof(send_data),?0);
????if?(ret?0
)
????{
????????perror("mq_send?error");
????????return;
????}
????printf("send?msg?=?%s,?cnt?=?%d\n",?send_data.buf,?send_data.cnt);
}


int?main(void)
{
????int?ret?=?0;
????struct?mq_attr?attr;

????///
????memset(&attr,?0,?sizeof(attr));
????attr.mq_maxmsg?=?MQ_MSG_MAX_ITEM;
????attr.mq_msgsize?=?MQ_MSG_MAX_SIZE;
????attr.mq_flags?=?0;
????s_mq?=?mq_open("/mq",?O_CREAT|O_RDWR,?0777,?&attr);
?if(-1?==?s_mq)
????{
????????perror("mq_open?error");
????????return?-1;
????}

????for?(size_t?i?=?0;?i?10
;?i++)
????{
????????send_data();
????????sleep(1);
????}

????mq_close(s_mq);

????return?0;
}
recv.c:
#include?
#include?
#include?
#include?
#include????????????/*?For?O_*?constants?*/
#include?????????/*?For?mode?constants?*/
#include?

#define?MQ_MSG_MAX_SIZE????512??///
#define?MQ_MSG_MAX_ITEM????5??///

static?mqd_t?s_mq;

typedef?struct?_msg_data
{

????char?buf[128];
????int?cnt;
}msg_data_t;

int?main(void)
{
????int?ret?=?0;
????struct?mq_attr?attr;
????char?recv_msg[MQ_MSG_MAX_SIZE]?=?{0};
????msg_data_t?recv_data?=?{0};
????int?prio?=?0;
????ssize_t?len?=?0;

????s_mq?=?mq_open("/mq",?O_RDONLY);
?if(-1?==?s_mq)
????{
????????perror("mq_open?error");
????????return?-1;
????}

????while?(1)
????{
????????if((len?=?mq_receive(s_mq,?(char*)&recv_data,?MQ_MSG_MAX_SIZE,?&prio))?==?-1)
????????{
????????????perror("mq_receive?error");
????????????return?-1;
????????}
????????printf("recv_msg?=?%s,?cnt?=?%d\n",?recv_data.buf,?recv_data.cnt);
????????sleep(1);
????}

????mq_close(s_mq);
????mq_unlink("/mq");

????return?0;
}
編譯、運(yùn)行:
gcc?send.c?-o?send_process?-lrt
gcc?recv.c?-o?recv_process?-lrt

2、共享內(nèi)存

消息隊(duì)列的讀取和寫入的過程,會(huì)有發(fā)生用戶態(tài)與內(nèi)核態(tài)之間的消息拷貝過程。而共享內(nèi)存的方式則沒有這個(gè)拷貝過程,進(jìn)程間通信速度較快。

在物理內(nèi)存上開辟一塊內(nèi)存空間,多個(gè)進(jìn)程可以將同一塊物理內(nèi)存空間映射到自己的虛擬地址空間,通過自己的虛擬地址直接訪問這塊空間,通過這種方式實(shí)現(xiàn)數(shù)據(jù)共享。

POSIX共享內(nèi)存頭文件:
#include?
#include?
#include?
共享內(nèi)存API接口:
/**
?*?@brief?創(chuàng)建共享內(nèi)存實(shí)例
?*
?*?Detailed?function?description
?*
?*?@param[in]?name:?要打開或創(chuàng)建的共享內(nèi)存文件名
?*?@param[in] oflag:打開的文件操作屬性
????????????????????-?O_CREAT:?創(chuàng)建一個(gè)共享內(nèi)存文件
????????????????????-?O_EXCL:?檢查共享內(nèi)存是否存在,一般與O_CREAT一起使用
????????????????????-?O_CREAT|O_EXCL:?共享內(nèi)存不存在則創(chuàng)建,已存在返回NULL
????????????????????-?O_NONBLOCK:?非阻塞模式打開,共享內(nèi)存不存在返回NULL
????????????????????-?O_RDONLY:?只讀模式打開
????????????????????-?O_WRONLY:?只寫模式打開
????????????????????-?O_RDWR:?讀寫模式打開
?*?@param[in] mode:文件共享模式,例如?0777
?*
?*?@return?成功返回共享內(nèi)存描述符,失敗返回-1,錯(cuò)誤碼存于error中
?*/

int?shm_open(const?char?*name,?int?oflag,?mode_t?mode);

/**
?*?@brief?刪除共享內(nèi)存
?*
?*?Detailed?function?description
?*
?*?@param[in]?name:?創(chuàng)建的共享內(nèi)存文件名
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?shm_unlink(const?char?*name);

/**
?*?@brief?將打開的文件映射到內(nèi)存
?*
?*?Detailed?function?description
?*
?*?@param[in]?addr:?要將文件映射到的內(nèi)存地址,一般應(yīng)該傳遞NULL來由Linux內(nèi)核指定
?*?@param[in]?length:?要映射的文件數(shù)據(jù)長度
?*?@param[in]?prot:?映射的內(nèi)存區(qū)域的操作權(quán)限(保護(hù)屬性),包括PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE
?*?@param[in] flags:?標(biāo)志位參數(shù),包括:MAP_SHARED、MAP_PRIVATE與MAP_ANONYMOUS。
?*?@param[in]?fd:??用來建立映射區(qū)的文件描述符,用?shm_open打開或者open打開的文件
?*?@param[in]?offset:?映射文件相對(duì)于文件頭的偏移位置,應(yīng)該按4096字節(jié)對(duì)齊
?*
?*?@return?成功返回0,失敗返回-1
?*/

void?*mmap(void?*addr,?size_t?length,?int?prot,?int?flags,?int?fd,?off_t?offset);
?
/**
?*?@brief?取消內(nèi)存映射
?*
?*?Detailed?function?description
?*
?*?@param[in]?addr:?由mmap成功返回的地址
?*?@param[in]?length:?要取消的內(nèi)存長度
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?munmap(void?*addr,?size_t?length);

/**
?*?@brief?將參數(shù)fd指定的文件大小改為參數(shù)length指定的大小
?*
?*?Detailed?function?description
?*
?*?@param[in]?fd:?已打開的文件描述符,以寫入模式打開的文件
?*?@param[in]?length:?要設(shè)置的長度
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?ftruncate(int?fd,off_t?length);

/**
?*?@brief?獲取文件相關(guān)的信息,將獲取到的信息放入到statbuf結(jié)構(gòu)體中
?*
?*?Detailed?function?description
?*
?*?@param[in]?fd:?已打開的文件描述符
?*?@param[out]?statbuf:?文件的信息
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?fstat(int?fd,?struct?stat?*statbuf);
共享內(nèi)存基本API接口使用例子:發(fā)送進(jìn)程給接收進(jìn)程發(fā)送測試數(shù)據(jù)。

send.c:

#include?
#include?
#include?
#include?
#include????????????/*?For?O_*?constants?*/
#include?????????/*?For?mode?constants?*/
#include?

#define?SHM_NAME?"/shm"

int?main(void)
{
????int?ret?=?0;

????///
????int?shm_fd?=?shm_open(SHM_NAME,?O_RDWR?|?O_CREAT,?0666);
????if?(shm_fd?==?-1)?
????{
????????printf("shm_open?error\n");
????}

????///
????ftruncate(shm_fd?,?8?*?1024);

????///
????struct?stat?filestat?=?{0};
????fstat(shm_fd,?&filestat);
????printf("st_size?=?%ld\n",filestat.st_size);

????///
????char?*shm_ptr?=?(char*)mmap(NULL,?filestat.st_size,?PROT_READ|PROT_WRITE,?MAP_SHARED,?shm_fd,?0);
????close(shm_fd);

????///
????char?buf[]?=?"hello?world";
????memmove(shm_ptr,buf,?sizeof(buf));
????printf("pid?%d,?%s\n",getpid(),?shm_ptr);

????///
????munmap(shm_ptr,?filestat.st_size);

????return?0;
}
recv.c:
#include?
#include?
#include?
#include?
#include????????????/*?For?O_*?constants?*/
#include?????????/*?For?mode?constants?*/
#include?

#define?SHM_NAME?"/shm"

int?main(void)
{
????///
????int?shm_fd?=?shm_open(SHM_NAME,?O_RDWR?|?O_CREAT,?0666);
????if?(shm_fd?==?-1)?
????{
????????printf("shm_open?failed\n");
????????exit(EXIT_FAILURE);
????}

????///
????ftruncate(shm_fd?,?8192);

????///
????struct?stat?filestat;
????fstat(shm_fd,?&filestat);
????printf("st_size?=?%ld\n",filestat.st_size);

????///
????char?*shm_ptr?=?(char*)mmap(NULL,?filestat.st_size,?PROT_READ|PROT_WRITE,?MAP_SHARED,?shm_fd,?0);
????close(shm_fd);
????
????///
????printf("pid?=?%d,?%s\n",?getpid(),?shm_ptr);
????munmap(shm_ptr,?filestat.st_size);
????shm_unlink(SHM_NAME);

????return?0;
}
編譯、運(yùn)行:
gcc?send.c?-o?send_process?-lrt
gcc?recv.c?-o?recv_process?-lrt

對(duì)具有多個(gè)處理核系統(tǒng)消息傳遞的性能要優(yōu)于共享內(nèi)存。共享內(nèi)存會(huì)有高速緩存一致性問題,這是由共享數(shù)據(jù)在多個(gè)高速緩存之間遷移而引起的。隨著系統(tǒng)的處理核的數(shù)量的日益增加,可能導(dǎo)致消息傳遞作為 IPC 的首選機(jī)制。

3、socket

UNIX域套接字與傳統(tǒng)基于TCP/IP協(xié)議棧的socket不同,unix domain socket以文件系統(tǒng)作為地址空間,不需經(jīng)過TCP/IP的頭部封裝、報(bào)文ack確認(rèn)、路由選擇、數(shù)據(jù)校驗(yàn)與重傳過程,因此傳輸速率上也不會(huì)受網(wǎng)卡帶寬的限制。

unix domain socket在進(jìn)程間通信同樣是基于“客戶端—服務(wù)器”(C-S)模式。

UNIX域套接字基本API接口使用例子:基于UNIX域套接字客戶端進(jìn)程向服務(wù)端進(jìn)程發(fā)送測試數(shù)據(jù)。

server.c:

#include?
#include?
#include?
#include?
#include????????????/*?For?O_*?constants?*/
#include?????????/*?For?mode?constants?*/
#include?
#include?
#include?
#include?

#define?SERVER_PATH?"/tmp/server"?

int?main(void)
{
?///
?int?server_fd?=?socket(AF_LOCAL,?SOCK_STREAM,?0);
?if(server_fd?0
)
?{
??printf("socket?error\n");
??exit(EXIT_FAILURE);
?}

?///
?unlink(SERVER_PATH);
?struct?sockaddr_un?server_addr;
?memset((char*)&server_addr,?0,?sizeof(server_addr));
?server_addr.sun_family?=?AF_LOCAL;
?strncpy(server_addr.sun_path,?SERVER_PATH,?sizeof(server_addr.sun_path)-1);
?if(bind(server_fd,?(struct?sockaddr*)&server_addr,?sizeof(server_addr))?0
)
?{
??printf("bind?error\n");
????????close(server_fd);
??exit(EXIT_FAILURE);
?}

?///
?if(listen(server_fd,?10)?0
)?
?{
??printf("listen?error\n");
????????close(server_fd);
??exit(EXIT_FAILURE);
?}

????///
?int?addr_len?=?sizeof(struct?sockaddr);
????struct?sockaddr_un?client_addr;
?int?client_fd?=?accept(server_fd,?(struct?sockaddr*)&client_addr,?(socklen_t?*)&addr_len);
?if(client_fd?0
)
?{
??printf("accept?error\n");
??close(server_fd);
??unlink(SERVER_PATH);
??exit(1);?
?}
?else
?{
??printf("connected?client:?%s\n",?client_addr.sun_path);
?}

?while(1)
?{
????????char?buf[128]?=?{0};

????????int?recv_len?=?read(client_fd,?buf,?sizeof(buf));?
????????if(recv_len?<=?0)
????????{
????????????printf("recv?error!\n");
????????????close(client_fd);
????????????exit(EXIT_FAILURE);
????????}

????????printf("recv?:?%s\n",?buf);
?}

????unlink(SERVER_PATH);
?close(server_fd);
????close(client_fd);

????return?0;
}
client.c:
#include?
#include?
#include?
#include?
#include????????????/*?For?O_*?constants?*/
#include?????????/*?For?mode?constants?*/
#include?
#include?
#include?
#include?

#define?SERVER_PATH?"/tmp/server"
#define?CLIENT_PATH?"/tmp/client"

int?main(void)
{
?///
?int?client_fd?=?socket(AF_UNIX,?SOCK_STREAM,?0);
?if(client_fd?0
)
?{
??printf("socket?error\n");
??exit(EXIT_FAILURE);
?}

?///
????struct?sockaddr_un?client_addr;
?memset((char*)&client_addr,?0,?sizeof(client_addr));
?client_addr.sun_family?=?AF_UNIX;
?strncpy(client_addr.sun_path,?CLIENT_PATH,?sizeof(client_addr.sun_path)-1);
?unlink(CLIENT_PATH);
?if(bind(client_fd,?(struct?sockaddr*)&client_addr,?sizeof(client_addr))?0
)
?{
??printf("bind?error\n");
??close(client_fd);
??exit(1);?
?}

?///
????struct?sockaddr_un?server_addr;
?server_addr.sun_family??=?AF_UNIX;
?strncpy(server_addr.sun_path,?SERVER_PATH,?sizeof(server_addr.sun_path)-1);
?int?ret?=?connect(client_fd,?(struct?sockaddr*)&server_addr,?sizeof(server_addr));?
?if(ret?0
)
?{
??printf("connect?error\n");
??close(client_fd);
??unlink(CLIENT_PATH);
??exit(1);??
?}?
?printf("connect?to?server:?%s\n",?server_addr.sun_path);

?while(1)
?{
????????char?buf[128]?=?{0};
????????if?(scanf("%s",?buf))
????????{
????????????int?send_len?=?write(client_fd,?buf,?strlen(buf));
????????????if?(send_len?<=?0)
????????????{
????????????????printf("write?error!\n");
????????????????close(client_fd);
????????????????exit(EXIT_FAILURE);??
????????????}
????????????else
????????????{
????????????????printf("send?success!?send:?%s,?send_len:?%d\n",?buf,?send_len);
????????????}
????????}?
?}

????unlink(SERVER_PATH);
????close(client_fd);

????return?0;
}

編譯、運(yùn)行:

gcc?server.c?-o?server_process
gcc?client.c?-o?client_process

類socket的其它進(jìn)程間通信方式:

實(shí)用 | nanomsg通信庫的簡單使用分享

mqtt應(yīng)用于進(jìn)程間通信

4、管道

在內(nèi)核中開辟一塊緩沖區(qū);若多個(gè)進(jìn)程拿到同一個(gè)管道(緩沖區(qū))的操作句柄,就可以訪問同一個(gè)緩沖區(qū),就可以進(jìn)行通信。涉及到兩次用戶態(tài)與內(nèi)核態(tài)之間的數(shù)據(jù)拷貝。

(1)匿名管道

內(nèi)核中的緩沖區(qū)是沒有具體的標(biāo)識(shí)符的,匿名管道只能用于具有親緣關(guān)系的進(jìn)程間通信。

調(diào)用pipe接口可以創(chuàng)建一個(gè)匿名管道,并返回了兩個(gè)描述符,一個(gè)是管道的讀取端描述符 fd[0],另一個(gè)是管道的寫入端描述符 fd[1]

管道是一個(gè)半雙工通信(可以選擇方向的單向傳輸)

匿名管道基本API接口使用例子:父進(jìn)程通過管道發(fā)送測試數(shù)據(jù)給子進(jìn)程。

#include?
#include?
#include?
#include?

int?main()
{
????///
?int?pipefd[2]?=?{-1};
???int?ret?=?pipe(pipefd);
????if?(ret?0
)
????{
???????printf("pipe?error\n");
???????exit(EXIT_FAILURE);
????}

????int?read_fd?=?pipefd[0];???///
????int?write_fd?=?pipefd[1];??///

????///
????pid_t?pid?=?fork();
????if?(pid?==?0)
????{
????????///
??char?buf[128]?=?{0};
??read(read_fd,?buf,?sizeof(buf));
????????printf("child?recv?data?from?father:?%s",?buf);
?}
????else?if?(pid?>?0)
???{
??///
????????char?*ptr?=?"hello88888888\n";
????????write(write_fd,?ptr,?strlen(ptr));
????}
?return?0;
}
編譯、運(yùn)行:

如果需要雙向通信,則應(yīng)該創(chuàng)建兩個(gè)管道。

(2)命名管道

命名管道也是內(nèi)核中的一塊緩沖區(qū),并且這個(gè)緩沖區(qū)具有標(biāo)識(shí)符;這個(gè)標(biāo)識(shí)符是一個(gè)可見于文件系統(tǒng)的管道文件,能夠被其他進(jìn)程找到并打開管道文件,則可以獲取管道的操作句柄,所以該命名管道可用于同一主機(jī)上的任意進(jìn)程間通信。

創(chuàng)建命名管道的接口:

int?mkfifo(const?char?*pathname,?mode_t?mode);
命名管道基本API接口使用例子:一個(gè)進(jìn)程往管道中寫入測試數(shù)據(jù),另一個(gè)進(jìn)程從管道中讀取數(shù)據(jù)。

fifo_wr.c:

#include?
#include?
#include?
#include?
#include?
#include?
#include?

#define?FIFO_PATH??"./fifo_file"

typedef?struct?_msg_data
{

????char?buf[128];
????int?cnt;
}msg_data_t;

void?send_data(int?fd)
{
????static?int?cnt?=?0;
????msg_data_t?send_data?=?{0};

????cnt++;
????strcpy(send_data.buf,?"hello");
????send_data.cnt?=?cnt;
????write(fd,?&send_data,?sizeof(send_data));
????printf("send?msg?=?%s,?cnt?=?%d\n",?send_data.buf,?send_data.cnt);
}

int?main(void)
{
????///
????int?ret?=?mkfifo(FIFO_PATH,?0664);
????if?(ret?0
?&&?errno?!=?EEXIST)
????{
????????printf("mkfifo?error\n");
????????exit(EXIT_FAILURE);
????}

????///
????int?fd?=?open(FIFO_PATH,?O_WRONLY);
????if?(fd?0
)
????{
????????printf("open?fifo?error\n");
????????exit(EXIT_FAILURE);
????}
????printf("open?fifo?success\n");
????
????///
????for?(size_t?i?=?0;?i?10
;?i++)
????{
????????send_data(fd);
????????sleep(1);
????}
????
????close(fd);

????return?0;
}
fifo_rd.c:
#include?
#include?
#include?
#include?
#include?
#include?
#include?

#define?FIFO_PATH??"./fifo_file"

typedef?struct?_msg_data
{

????char?buf[128];
????int?cnt;
}msg_data_t;

int?main(void)
{
????umask(0);
????///
????int?ret?=?mkfifo(FIFO_PATH,0664?);
????if?(ret?0
?&&?errno?!=?EEXIST)
????{
????????printf("mkfifo?error\n");
????????exit(EXIT_FAILURE);
????}

????///
????int?fd?=?open(FIFO_PATH,?O_RDONLY);
????if?(fd?0
)
????{
????????printf("open?error\n");
????????exit(EXIT_FAILURE);
????}
????printf("open?fifo?success\n");

????while(1)
????{
????????msg_data_t?read_data?=?{0};
????????///
????????int?ret?=?read(fd,?&read_data,?sizeof(read_data));
????????if?(ret?0
)
????????{
????????????printf("read?error\n");
????????????exit(EXIT_FAILURE);
????????}
????????else?if?(ret?==?0)
????????{
????????????printf("all?write?closed\nd");
????????????exit(EXIT_FAILURE);
????????}
????????printf("read_data?=?%s,?cnt?=?%d\n",?read_data.buf,?read_data.cnt);
????????sleep(1);
????}
????close(fd);

????return?0;
}
編譯、運(yùn)行:
gcc?fifo_wr.c?-o?fifo_wr
gcc?fifo_rd.c?-o?fifo_rd

5、信號(hào)量

信號(hào)量(Seamphore)是進(jìn)程和線程間同步的一種機(jī)制。

信號(hào)量本質(zhì)是一個(gè)非負(fù)的整型變量。增加一個(gè)可用資源執(zhí)行加一,也稱為V操作;獲取一個(gè)資源資源后執(zhí)行減一,也稱為P操作。

信號(hào)量根據(jù)信號(hào)值不同可分為兩類:

信號(hào)量根據(jù)作用對(duì)象不同可分為兩類:

POSIX信號(hào)量頭文件:

#include?

編譯鏈接需要加-lpthread參數(shù)。

信號(hào)量API接口:

/**
?*?@brief?創(chuàng)建信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?name:?信號(hào)量名稱
?*?@param[in]?mode:?訪問權(quán)限
?*?@param[in]?value:?信號(hào)量初始值
?*
?*?@return?成功時(shí)返回指向信號(hào)量的指針,出錯(cuò)時(shí)為SEM_FAILED
?*/

sem_t?*sem_open(const?char?*name,int?oflag,?mode_t?mode,?unsigned?int?value);

/**
?*?@brief?初始化信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*?@param[in]?pshared:?信號(hào)量作用域,分為進(jìn)程內(nèi)作用域PTHREAD_PROCESS_PRIVATE和跨進(jìn)程作用域PTHREAD_PROCESS_SHARED
?*?@param[in]?value:?信號(hào)量初始值
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_init(sem_t?*sem,?int?pshared,?unsigned?int?value);

/**
?*?@brief?獲取信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*?@param[out]?sval:?保存返回信號(hào)值地址
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_getvalue(sem_t?*sem,?int?*sval);

/**
?*?@brief?阻塞方式等待信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_wait(sem_t?*sem);

/**
?*?@brief?指定超時(shí)時(shí)間阻塞方式等待信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*?@param[in]?sem:?超時(shí)時(shí)間,單位為時(shí)鐘節(jié)拍
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_timedwait(sem_t?*sem,?const?struct?timespec?*abs_timeout);

/**
?*?@brief?非阻塞方式等待信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_trywait(sem_t?*sem);

/**
?*?@brief?產(chǎn)生信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_post(sem_t?*sem);

/**
?*?@brief?銷毀信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_destroy(sem_t?*sem);

/**
?*?@brief?關(guān)閉信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?sem:?信號(hào)量實(shí)例地址
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_close(sem_t?*sem);

/**
?*?@brief?分離信號(hào)量
?*
?*?Detailed?function?description
?*
?*?@param[in]?name:?信號(hào)量名稱
?*
?*?@return?成功返回0,失敗返回-1
?*/

int?sem_unlink(const?char?*name);
信號(hào)量基本API接口使用例子:父子進(jìn)程間通信
#include?
#include?
#include?
#include?
#include?

#define?SEM_NAME?"sem"

int?main?(void)
{
????int?sem_val?=?0;

????///
????sem_t?*sem?=?sem_open(SEM_NAME,?O_CREAT,?0666,?1);
????if?(NULL?==?sem)
????{
???????printf("sem_open?error\n");
???????exit(EXIT_FAILURE);?
????}

????///
????pid_t?pid?=?fork();
????if?(pid?==?-1)?
????{
????????printf("fork?error\n");
????????sem_close(sem);
????????sem_unlink(SEM_NAME);
????????exit(EXIT_FAILURE);
????}
????else?if(pid?==?0)?
????{
????????///
????????for?(size_t?i?=?0;?i?5
;?i++)
????????{
????????????sem_wait(sem);
????????????if?(sem_getvalue(sem,?&sem_val)?!=?-1)?
????????????{
????????????????printf("child?process?P?operation,?sem_val?=?%d\n",?sem_val);
????????????????sleep(1);
????????????}
????????}
????????_exit(1);
????}
????else?if?(pid?>?0)
????{
????????///
????????for?(size_t?i?=?0;?i?5
;?i++)
????????{
????????????sem_post(sem);
????????????if?(sem_getvalue(sem,?&sem_val)?!=?-1)?
????????????{
????????????????printf("prarent?process?V?operation,?sem_val?=?%d\n",?sem_val);
????????????????sleep(2);
????????????}
????????}
????}

????///
????sem_close(sem);
????if?(sem_unlink(SEM_NAME)?!=?-1)?
????{
????????printf("sem_unlink?success\n");
????}

????return?0;
}
編譯、運(yùn)行:

IPC總結(jié):

操作系統(tǒng)根據(jù)不同的場景提供了不同的方式,消息隊(duì)列、共享內(nèi)存、UNIX域套接字、管道、信號(hào)量。

消息隊(duì)列: 內(nèi)核中的一個(gè)優(yōu)先級(jí)隊(duì)列,多個(gè)進(jìn)程通過訪問同一個(gè)隊(duì)列,在隊(duì)列當(dāng)中添加或者獲取節(jié)點(diǎn)來實(shí)現(xiàn)進(jìn)程間通信。

共享內(nèi)存: 本質(zhì)是一塊物理內(nèi)存,多個(gè)進(jìn)程將同一塊物理內(nèi)存映射到自己的虛擬地址空間中,再通過頁表映射到物理地址達(dá)到進(jìn)程間通信,它是最快的進(jìn)程間通信方式,相較其他通信方式少了兩步數(shù)據(jù)拷貝操作。

UNIX域套接字: 與TCP/IP套接字使用方式相同,但UNIX域套接字以文件系統(tǒng)作為地址空間,不需經(jīng)過TCP/IP的頭部封裝、報(bào)文ack確認(rèn)、路由選擇、數(shù)據(jù)校驗(yàn)與重傳過程,因此傳輸速率上也不會(huì)受網(wǎng)卡帶寬的限制。

管道: 內(nèi)核中的一塊緩沖區(qū),分為匿名管道和命名管道。匿名管道只能用于具有親緣關(guān)系的進(jìn)程間;而命名管道可用于同一主機(jī)上任意進(jìn)程間通信。

信號(hào)量: 本質(zhì)是內(nèi)核中的一個(gè)計(jì)數(shù)器,主要實(shí)現(xiàn)進(jìn)程間的同步與互斥,對(duì)資源進(jìn)行計(jì)數(shù),有兩種操作,分別是在訪問資源之前進(jìn)行的p操作,還有產(chǎn)生資源之后的v操作。

相關(guān)資料:

END

來源:嵌入式大雜燴

版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。

推薦閱讀
華為C/C++編碼規(guī)范流出
C語言的include沒你想的那么簡單!
入職Linux驅(qū)動(dòng)工程師后,我才知道的真相…

→點(diǎn)關(guān)注,不迷路←

嵌入式ARM 關(guān)注這個(gè)時(shí)代最火的嵌入式ARM,你想知道的都在這里。
評(píng)論
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐 J褂瞄_關(guān)型的充電控制芯片不穩(wěn)定。嘗試自行設(shè)計(jì)一個(gè)。整體采用分立三極管 + TL431架構(gòu),分4個(gè)功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實(shí)現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導(dǎo)通,對(duì)地拉低 R1、R2 組成的分壓控制節(jié)點(diǎn)電位;該節(jié)點(diǎn)直
    southcreek 2026-08-07 13:45 165瀏覽
  • 在物聯(lián)網(wǎng)從“萬物互聯(lián)”邁向“萬物智聯(lián)”的進(jìn)程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡(luò)覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場的絕對(duì)主力。隨著2G/3G網(wǎng)絡(luò)的逐步退網(wǎng)以及新國標(biāo)對(duì)終端設(shè)備智能化、定位功能的強(qiáng)制要求,Cat.1模組迎來了爆發(fā)式的增長窗口。在這一關(guān)鍵節(jié)點(diǎn),基于華為海思Hi2131芯片設(shè)計(jì)的LTE Cat.1模組,憑借其在能效、射頻、架構(gòu)及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競爭力的連接最優(yōu)解。核心技術(shù)優(yōu)勢:重塑Cat.1能效與連接標(biāo)桿海
    用戶1778981989717 2026-08-05 21:04 143瀏覽
  • 文:杜杰編輯:侯煜當(dāng)?shù)貢r(shí)間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯(lián)邦通信委員會(huì)(FCC)正式更新《受管制清單》,新增兩大類設(shè)備——境外生產(chǎn)的先進(jìn)機(jī)器人設(shè)備、境外生產(chǎn)的聯(lián)網(wǎng)電力逆變器。FCC在官方情況說明書中明確,該類境外制造產(chǎn)品,“會(huì)對(duì)美國國家安全或美國民眾的人身安全構(gòu)成無法承受的風(fēng)險(xiǎn)”。本次新規(guī)設(shè)置明確豁免機(jī)制:經(jīng)美國國防部(DoW)、電力逆變器品類經(jīng)美國國土安全部(DHS)審核并授予“有條件批準(zhǔn)”,認(rèn)定對(duì)應(yīng)設(shè)備品類不存在重大安全風(fēng)險(xiǎn),即可獲得準(zhǔn)入豁免。同時(shí)政策嚴(yán)格執(zhí)行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 288瀏覽
  • 摘要防爆自控系統(tǒng)同時(shí)布設(shè)本安信號(hào)、工業(yè)總線、動(dòng)力供電三類線路,僅依靠標(biāo)識(shí)標(biāo)牌管控插接極易出現(xiàn)人為錯(cuò)插問題,高壓動(dòng)力回路竄入本安弱電回路會(huì)突破安全柵限能標(biāo)準(zhǔn),產(chǎn)生點(diǎn)火風(fēng)險(xiǎn)。依托 A、D、K 標(biāo)準(zhǔn)化機(jī)械防呆編碼體系,搭配護(hù)套顏色區(qū)分管理,適配 3 針 3 孔免焊接冷壓增安型防爆航插、5PIN 總線防爆航空插頭、8 芯焊接防爆法蘭插座的選型使用,從物理結(jié)構(gòu)層面杜絕防爆接近開關(guān)連接器、防爆傳感器航插接頭混用插接問題,補(bǔ)齊防爆系統(tǒng)被動(dòng)安全防護(hù)體系。關(guān)鍵詞圓形防爆連接器,防呆編碼防爆航插,防爆航空插頭,防爆
    kyfbest科迎法電氣 2026-07-31 18:29 376瀏覽
  • 摘要在防爆電氣設(shè)計(jì)中,只參照芯數(shù)選型而忽略額定載流量,長期滿負(fù)荷運(yùn)行會(huì)出現(xiàn)插頭發(fā)熱、接觸面氧化、IP67 密封受熱老化等問題。結(jié)合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級(jí)電流參數(shù)對(duì)照表,區(qū)分冷壓免焊接、焊接兩種接線結(jié)構(gòu)的安全載流數(shù)值,設(shè)置合理電流冗余系數(shù),搭配使用環(huán)境修正參數(shù),規(guī)范防爆接近開關(guān)連接器、防爆法蘭插座的選型計(jì)算方式。關(guān)鍵詞圓形防爆連接器,載流參數(shù)表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產(chǎn)品概述圓形防爆連接器觸點(diǎn)載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128604瀏覽
  • 在前六期中,我們已經(jīng)分別討論了 CRA 的適用范圍、整體影響、漏洞通報(bào)義務(wù)、風(fēng)險(xiǎn)評(píng)估與技術(shù)文檔證據(jù)鏈、第三方組件與 SBOM 供應(yīng)鏈治理,以及產(chǎn)品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業(yè)已經(jīng)能夠回答幾個(gè)核心問題:產(chǎn)品是否落入 CRA 適用范圍,產(chǎn)品由哪些組件構(gòu)成,企業(yè)如何證明自己在設(shè)計(jì)、開發(fā)和上市前采取了必要的安全措施,以及產(chǎn)品上市后如何持續(xù)維護(hù)和安全下線。但對(duì)于真正準(zhǔn)備落地 CRA 合規(guī)的企業(yè)來說,還有一個(gè)更現(xiàn)實(shí)的問題:CRA 的法規(guī)條文相對(duì)原則化,企業(yè)應(yīng)當(dāng)如何把“網(wǎng)絡(luò)安
    虹科云科技 2026-08-03 16:51 79172瀏覽
  •     長期專注WiFi領(lǐng)域,也算是行業(yè)老兵了!同行閑聊中,時(shí)不時(shí)能提起我和我們!從疫情起,國產(chǎn)替代風(fēng)生水起,起起落落,大浪淘沙,生存下來的都是強(qiáng)者!    WiFi模塊應(yīng)用廣泛,對(duì)于高端市場和特定市場,要求WIFI模塊需要過CE/FCC之類的認(rèn)證,也就是說沒有認(rèn)證的模塊,不具備導(dǎo)入產(chǎn)品設(shè)計(jì).接下來就和大家聊聊認(rèn)證模塊選型參考!    WIFi模塊硬件方面主要考慮以下九點(diǎn)特性:    1
    納拓科技 2026-07-31 17:56 229瀏覽
  • 導(dǎo)語在現(xiàn)代高速數(shù)字電路設(shè)計(jì)中,信號(hào)的完整性已不僅是理想波形推演,而是一場與物理非理想特性正面博弈的工程實(shí)踐。濾波器芯片作為凈化傳輸鏈路的關(guān)鍵屏障,其核心挑戰(zhàn)在于:能否有效識(shí)別并濾除那些隱匿在電平跳變過程中的亞納秒級(jí)瞬態(tài)脈沖干擾,這類干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統(tǒng)函數(shù)發(fā)生器受限于采樣率與邊沿速率,根本無法忠實(shí)復(fù)現(xiàn)如此狹窄且陡峭的異常波形。針對(duì)此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細(xì)刻畫,配合SPG
    德思特測試測量 2026-08-05 14:06 5瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個(gè)生產(chǎn)過程里哪怕0.1微米的誤差,都會(huì)直接廢掉整批產(chǎn)品,這也是小尺寸晶振過去長期依賴進(jìn)口,國內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 223瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 29817瀏覽
  • 智能寵物用品這幾年快速普及,自動(dòng)清理幾乎成了智能貓砂盆的標(biāo)配。貓咪用完離場,設(shè)備自動(dòng)翻轉(zhuǎn)清理,養(yǎng)寵家庭省去了每天彎腰清理的麻煩。但自動(dòng)清理的第一步,是先準(zhǔn)確判斷貓到底在不在盆里。這個(gè)看似簡單的問題,在小空間里并不容易做好。近場檢測的痛點(diǎn):距離太遠(yuǎn)反而誤事貓砂盆內(nèi)部空間有限。如果傳感器的檢測距離設(shè)得偏大,盆外路過的貓、人甚至物品都會(huì)被誤判為貓?jiān)谂鑳?nèi),結(jié)果該清理時(shí)不清理、不該清理時(shí)亂清理,體驗(yàn)直接崩壞。這類產(chǎn)品的核心訴求其實(shí)就一句話:近距離、小范圍、精準(zhǔn)識(shí)別,不能有半點(diǎn)誤判。常規(guī)感應(yīng)方案常因檢測距離
    唯創(chuàng)知音語音芯片 2026-07-31 16:51 295瀏覽
  • 做藍(lán)牙音箱的工程師大概都碰過這個(gè)局面。產(chǎn)品要連手機(jī)放歌,要本地播開機(jī)提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報(bào)。三件事拆開,早先的常規(guī)做法是音頻藍(lán)牙一顆料、數(shù)傳藍(lán)牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機(jī)電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍(lán)牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對(duì)藍(lán)牙音箱來說,最實(shí)在的好處就
    唯創(chuàng)知音語音芯片 2026-08-06 15:14 170瀏覽
  • ?摘要:低價(jià)大流量卡正全面退市,政策收緊已成定局。面對(duì)傳統(tǒng)號(hào)卡的不確定性,隨身WiFi憑借穩(wěn)定連接、多設(shè)備共享、獨(dú)立設(shè)備和靈活套餐等優(yōu)勢,成為務(wù)實(shí)可靠的備選方案。1、流量卡黃金時(shí)代要結(jié)束了通信行業(yè)正迎來一場前所未有的“地震式”調(diào)整——曾讓無數(shù)用戶追捧的低價(jià)大流量卡,正在全速退出各大平臺(tái)。這早已不是一次普通的競合,而是一場趨勢性的行業(yè)洗牌。回望過去,19元200G的神卡,那時(shí)真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設(shè)計(jì) 2026-08-03 10:21 128799瀏覽
  • 在EMC測試過程中,傳導(dǎo)發(fā)射(Conducted Emission,CE)超標(biāo)是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標(biāo)曲線背后,可能對(duì)應(yīng)著完全不同的干擾機(jī)理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負(fù)載、電纜布局或接地結(jié)構(gòu)引起的連鎖反應(yīng)。 · 150kHz~1MHz 超標(biāo):多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標(biāo):通常共模噪聲占主導(dǎo),干擾通過火線/零線對(duì)地回路傳播。 如果條件允許,用電流探
    譽(yù)磁電磁兼容EMC 2026-07-31 18:45 479瀏覽
我要評(píng)論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請(qǐng)使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 爱国让你想起什么| 电影《金悔瓶2008》演员表紫烟| 姜素拉电影在线播放| 韩剧《大度》在线观看全集 | 韩国电影遥控器控制人叫什么| 新杜十娘| 女儿国满天星版1988| 阳光并不遥远| 我的老婆姐姐免费播放| 蘑菇魔女电视剧| 大学生爬火车拍照被烧伤进ICU| 莫妮卡演过巜生殖按摩电影吗| 三十而已免费观看完整版全集| 《悬崖绝壁》| 和部长一起去出差旅| 无上神帝全集免费观看| 老阿姨在线观看免费版电视剧| 翻转立方体| 我和僵尸有个约会1粤语在线观看| 神奇的遥控女上司| 罕见四胞胎排排睡| 杨敏1—5集免费观看电视剧下载 | 变形金刚:赛博坦之战| 家庭教师1| 朋友麦子5的抵债之举中字| 周其凤简历| 归路连续剧| 美国爸爸的种子免费观看电视剧| 勇探实录国语| 杀破狼2电影国语| 任达华舞男| 我让最想被拥抱的男人威胁了全集| 妈妈的职业4免费观看完整版高清| 姐妹牙医1986电影免费观看| 日剧second love| 小蜜桃五| 为什么高三的晚霞总是格外美| 水电工的艳遇电影| 电影女按摩师| 女版战狼六三人| 被誉为乡土文学之父的是| 漂亮的小姨| 许艺昌最新电影《隔壁男孩》| 命运印度电视剧| 釜山行2正片观看| 禁忌女孩第1季| 蜡笔小新1~9季恐怖剧集 | 丰满学生美女电影| 宠灵实验室之狸奴艾莉| 搞笑漫画日和中文| 漂亮的妈妈7开头的字| 剿匪英雄 电视剧| 新天龙八部43集| 儿子的房间老妈跟外人睡好吗| 灿烂的花园综艺免费观看高清| 郝板栗无删减版在线播放| 为时已是寿司!?| 我的XL司令第一季真人版| 巴巴爸爸中文动画片| 急诊护士完整版在线观看| 美少女战士中文版| 韩国理伦片驯服小峓子豆瓣| 高清《突然的喜欢》电视剧| 游泳池的特殊待遇电影| 名门望族粤语| 赤子板栗千金小姐在线观看| 《斯巴达2帝国女版》在线| 《部长出差的日子》中字| 雅典奥运会男篮决赛| 电影6680| 女子在洱海裸泳 警方介入| 《激战丛林》满天星在线看 | 《禁忌5》中文字幕| 喜爱夜蒲国语版下载| 《东成西就》| 爱人电影在线观看| 小猪佩奇的午夜后宫游戏下载| 判处勇者刑| 二战黑豹电影免费观看高清完整版| 星掠者在线观看| WRITEAS粗壮| 今夜无人入睡免费观看韩剧| 星际大战动画片| 娘家的故事| 庆余年2电视剧免费全集在线观看| 免费看情人网站| 美国电影免费看| 坎贝奇品味人生在线观看完整版| 大漠苍狼电视剧| 公浮手中字8| 苍井空电影网| 男女愁愁愁在线观看| 家有儿女第四部| 战狼6大牛影库| 妄想学生会ova| 特警力量 电视剧| 信者无敌电视剧全集| 名侦探柯南547| 阿诺拉完整版在线看高清| 愤怒的小鸟2在线观看| 房奴试爱电视剧原声开头| 雪在烧百度影音| 凯登克罗斯电影集锦| 聊斋之艳蛇在线观看| 隐形的帽子韩剧| 密爱韩国电影完整版| 美国1985G点2| 米奇电影| 能飞英语网| 特邀外卖员的女主角是谁| 少年班 电影| 私人航空1法国满天星免费播放| 屠狼刀全集在线观看| 扫毒风暴电影| 银魂永远的万事屋| 秘密10| 星梦天使国语版全集土豆网| 紧急行动40集免费观看| 战神电视剧全集免费| 蜡笔小新剧场版森巴入侵计划| 《夫妇联欢-回不去的夜晚》 | 天生一对印度| 哆啦a梦电影国语| 国语版A片年轻的母亲| 法证先锋粤语第一部| 周处除三害在线观看完整普通话| 高空监狱2在线观看完整免费高清原声满天星2019 | 公的浮之手在线观看完整版| 能免费看18视频网站| 铜铜铜铿铿铿锵锵锵锵免费观看| 冰冷长街| 《俘虏之锁》免费观看完整版| 失忆的劳拉电影| 得闲炒饭在线观看| 弹幕记忆| 熊出没之过年动画| 一起愁愁30集全集免费看| 镖行天下前传之库丁之谜| 你的目光所及之处韩剧| 神犬奇兵演员表全部| tobu4美国| 绝命幽灵船电影未删减版在线观看| 加勒比女| 美丽屋景1卖房子| 妙贼警探第四季| 《无憾》免费观看| 我喜欢你免费观看电视剧完整版| 广场舞电话情缘| 温柔的背后吻戏| 女超人法国电影完整版| 流浪地球2完整版在线看观看免费 卧底归来第二部免费 | 越狱连续剧| 俺爹是卧底 电视剧| 冰糖炖雪梨电视剧免费观看| 荣誉守则成人版电影在线观看 | 骄阳似我电视剧在线播放| 成熟男人照片| 假期剩5天作业剩7本女孩大哭| 夏日情人在线观看| 《天海翼和部长一起去出差旅》 | 阴阳镇怪谈在线观看| 换脸王鸥电影免费观看| 花琉璃轶闻电视剧全集免费观看| 麻生香织电影| 专家建议对50万以上存款收税 | 美国版荷尔蒙15| 完整的恶魔之眼| 凪光替夫还账的电影最后的时刻| 王妃和离:王爷追妻短剧全集| 《房奴试爱》开头原声| 北非谍影免费| 满天星在线观看完整免费高清原声满天| 短剧妥协完整版在线播放| 人人爱人人乐免费| 上海404是什么意思| 自古英雄出少年免费观看完整版| 凯帕克电影作品在线观看| 花月电视剧免费观看| 电影女律师替丈夫还债| 白雪公主与猎人主题曲| 电影《水电工人的绝遇》免费| 疯狂的女人| 扫黑风暴在线观看免费| 天将之物| 正阳门下全集下载| 年轻的母亲5在线| 以爱为营电视剧免费观看在线| 女版战狼10国语在线观看| 新奥特曼 在线观看| 不怕开水烫| 怀特安吉拉高清在线观看| 苦尽甘来韩剧免费观看影视大全| 电影植物学家的女儿| 刚结婚陪部长出差在线观看| 美丽的小蜜桃4中国版演唱者是谁| 电视剧蝶影全集免费观看下载| 牙医姐妹在线播放| 妈妈的厨房爆火短剧| 女超人电影法国| 山西电视台少儿频道| 超人麦乐迪电影满天星在线播放| 《巡回检察组》在线观看| 功夫状元演员表| 小蜜桃4| 女超人满天星版麦乐迪在线观看完整 | 牙医姐妹86日版免费看| 不要见怪电影| 袁阔成水泊梁山| 《哪吒1》免费完整版| 我老公的家庭教师在线观看| 特邀送货员 电影| 30集电视剧关中匪事免费观看| 古墓丽影山寨版满天星在线观看| 花样少年少女| 巜战狼6免费观看》日韩| 特战荣耀电视剧完整版免费观看| 《野兽之录》电影播放在线观看| 龚玥菲新剧全集在线观看高清| 微笑妈妈韩剧免费完整观看| 十七岁日本韩国电视剧| 爱神电影| 黑人巨茎大战俄罗斯美女的背景故事| 生日快乐电影| 《激战丛林》完整版免费观看中文字| 新春去春又回| 变形金刚3国语版| 禁欲韩国| 欢乐颂5| 电影《香醇的绣感》刘莫嘉| 愤怒的小鸟2电影| 宝贝计划电影免费观看完整版| 禁忌7年转一代| 红高梁电视剧| 仙逆更新至96集在线| 同学的妈妈| 午夜凶铃 贞相大白| 交换一天| 狂飙40集在线观看免费| 女教授隐藏的魅力| 加勒比海盗女版电影完整版 | 贞观长歌高清| 《法国瑜伽》免费观看中文版| 普罗米修斯高清| 奇葩说第六季在线观看| 刑侦12| 一起嗟嗟嗟30分钟免费观看视频| 小时代二在线观看| 了凡四训电视剧完整版免费观看| 韩剧《爷爷与媳妇》剧情介绍| 古惑仔人在江湖| 完美世界免费观看全集 | 酒店免费观看完整版高清| 叶问 粤语| 现在和你相爱的人在一起吗完整版 | 安娜情欲史迅雷下载| 幸福爱人全集| 多人轮换| 德国女子亲卫队满天星1973在线观看| 枯骨之余猜生肖| 《延禧攻略》在线观看免费高清全集| 蓝色的帽子在线观看| 终极三国全集| 姐姐的朋友网站| 韩剧《好兄弟的妹妹爱上我》| 渔夫在线观看免费| 鹰巢预备警官| 九九电视剧免费观看| 不雅空乘4| 元敬韩国电影免费观看| 娘王 下载| 婚纱 韩国电影| 斗罗大陆观看免费完整版 | 小生怕怕粤语| 我形我速5| 四少妇按摩记在线观看观| 冷血人狼完整版| 播九公社在线观看| 那年花开月正圆迅雷下载| 妙手房术欧洲版免费观看方法| 中日最新动态| 美乃雀 替夫还债的电影免费观看| 一年级大结局下| 需要爸爸播种子2电影| 少年包青天第一部全40集| 婆婆妈妈综艺在线观看| 渣男前任日剧| 莲花楼电视剧星辰影视在线观看| 高清《雏菊》| 星宫一花| 电影《欲性高》| 渔夫荒野史记在线观看| 王祖贤潘金莲之前世今生| 新金瓶梅免费下载| 电视剧都是天使惹的祸| 一虎一席谈 孔庆东| 暴躁老妈的46集全免费观看| 台球杆法| 土豆网电视剧情非情| 检修工遇强奸犯 韩国电影| 《丈夫邀部长来家吃饭》日剧中文版2.| 夏家三千金68| 星克莱尔的《第一夫人》在线观看 | 遗失的爱| 小夫妻时代演员表| 坎贝奇《无憾》全集免费看 | 超级富豪| 电影《享受乐趣》1982版| 射雕英雄传免费观看| 说不出的爱电视剧| 事物的秘密在水池一段| 黑白诀电视剧免费观看完整版高清| xl司令全集在线观看完整版| 韩剧顶楼| 韩剧《婚后的生活》| 三年成全免费观看高清在线播放| 功夫熊猫电视剧| 绝种好男人| 隔壁的邻居免费完整版电视剧| 要爸爸播种2演员全集资源| 高清生命树未删减| 你给我的喜欢1-24全集免费| 水月篇电影完整版| 危情营救在线观看| 二十四史前四史| 猪蜜蜜在线观看完整版在线| 凯帕克全集在线观看| 哈利波特5国语版| 暮光之城2| 天堂网2023| V酒店第一季完整版在线观看| 春来定风波大结局| 《导师》完整版免费观看高清电影| 上饶市| 便利店坏妻子| 分手大师西瓜影音| 《灭火宝贝》在线观看| 部长出差的日子电影| 末日袭击| 高清《烧酒战争》电影| 问心免费观看全集40集在线观看| 《妻子被下春药在线》| 春节的拼音| 《女律师的坠落》免费观看全集| 英雄百夜全集观看| 克莱尔《总统之夜》| 好想做一次大结局免费观看| 完美世界全集免费| 大真探怪兽之谜3| 溢出第一季全集免费观看| 画壁快播| 《汤摇庄的幽奈同学》| 湖南男子捅杀3人| 《我的游泳教练》| 即兴爵士韩剧| 《地爆天星》赛仑在线观看| 花容月貌电影免费| 苍老师的电影电视剧在线观看 | 需要爸爸来播种在线观看完整版中文版| 爱情雨国语版全集| xl司令动漫全集在线观看真人 | 信义大结局| 我们民谣2022| 真相电视剧在线观看完整版免费| 电影《搜索》| 美国大片国语普通话| 终极三国第47集| 铁甲威龙| 见鬼惊魂旅| 双人高潮按摩在线观看免费高清版 | 天使堕落| over flowe| 低俗小说 在线| 朋友的妈妈动漫| 安达市| 男按摩师做乳房按摩伦理片在线播放| 水浒传电视剧2011| 媒体:高铁之大理应放得下卫生巾| 正在播放: JUL-945 在没有丈夫的平日里,我被打工归来的无与伦比的岳父强奸,直 | 漂亮的保姆6完整版在线播放| 东北往事之黑道风云二十年| 大耳朵图图之小小欢乐魔法师| 北风那个吹在线观看免费完整版 | 离婚律师 电视剧| 龙凤店国语百度影音| 理发店里的特殊待遇| 美国蜜桃在线| 魔侠传好玩吗| 云海翻腾孙悟空11| 总统之夜1997满天星免费观看| 《云南虫谷》电影| 农场主的女儿们 经典973蘑菇| 刑警 粤语| 斯巴达第四季无删减在线看 | 高清名侦探柯南:独眼的残像 | 天才不能承受之重| 舒淇主演《玉女心》电影免费观看 | 飚车电影| 女兵与暴行一版一印| 五十度灰免费观看全集高清版| 吗吗的朋友33| 与君同寝| 北京遇上西雅图 影音| 我为爱狂意大利版| 朝国年经的继4免费观看时间| 伦理电影瓜达卢佩的玫瑰| 现场dj舞曲| 鬼哭狼嚎的意思| 女战狼10高清完整版在线观看视频| 房奴试婚开头原声| 包青天系列| 监控还原39人遇难火灾经过| 私人女性监狱美国版是哪个国家的 | 《法国空乘5》满天星| 母亲5免费完整高清电视| 360大佬爱上我第一季完整版| 高清禁忌女孩:重置| しぼっちゃうぞ中文在线观看| 吴邪的私家笔记免费观看| 高清《恋爱女子宿舍》| 东宫西宫下载| 天堂的张望 电影| 《特别酒店》免费观看| 烽火儿女情 电视剧| 50岁阿姨大人电视剧免费观看| 奇妙的命运呀电视剧免费观看| 性解密之大牛影库| 日本战狼4免费国语| 张警官第三集在线观看| 建议取消强制自动续费| 中阳县| 雪mm倒立| 胜女的代价剧情介绍| 节点钥匙| 东方侠客免费观看全集| 黑白黑白配免费免费观看视频| 中印冲突来龙去脉| 洛丽塔1997| 我的野蛮王妃下载| 卖保险套的女人| 《交换:完美的邻居》高清| 怒放电视剧免费观看全集| 素鸡豆腐| 《禁忌5》高潮| 《狙击蝴蝶》全集免费| 电影部长出差的日子| 滚滚红尘免费| 中华大丈夫高清| 异形夺命舰免费观看中文版| 伦理片《需要爸爸播种子》1号线HD中字-未删减完整版手机免费在线观看-91神马 | 疯狂动物城西瓜影音| 流星花园 泰版观看全集| 兔子先生 天美影院| 千灭天际线| 花园的密秘电影在线观看| 恶行之外粤语版免费观看| 妓房乱动事件| 好妈妈3电视连续剧| 朋友的朋友| 熊出没动画片全集之环球大冒险| 雍正王朝高清全集在线观看| 山海情剧情介绍| 《法国空乘6》免费| 男生操男生动漫| 《咒术回战 第三季》| 人猿泰山意大利1995时长1小时34分| 能帮我弄干净吗?电视剧| 亲爱的她们| 杰西简牺牲最大的电影| 上错花轿嫁对郎在线观看| 战狼6| 公路文糙汉文有肉女强男强小说| 超越情感电视剧免费观看全集完整版| 完美邻居| 且试天下40集完整版免费| 女朋友的妹妹电影| 墨西哥电视剧《la rosa de guadalupe》(瓜达卢佩的玫瑰/奇迹玫瑰),熟女名字叫 | 爱情珠宝电视剧全集免费观看| 韩版花样男子国语版| 夫人的侄子意大利| 美国荷尔蒙免费观看高清| 卡萨布兰卡电影| 插曲的痛30集全集免费播放电影下载 | 苏州市| 纵横四海粤语版电视剧免费观看| 龙年图片壁纸| 韩国电影美发店的特殊待遇| 非你莫属泰剧在线观看| 巨轮粤语28| 女职工的特殊待遇5| 陆贞传奇第50集| 那小子不可爱电视剧| 美国禁忌结局- 5芭芭拉| 烟火人家40集免费观看| 家门的荣光分集介绍| 萝莉星克莱尔 在线| 哈利 波特与死亡圣器下| 21世纪爱情指南| BHHWTD年轻妈妈| 少女3完整免费观看版高清在线 | 女儿 电影| 女性私人监狱| 韩剧《大力女子都奉顺》| 地震警报响起 男生抱同桌撤离| 赵露思珠帘玉幕电视剧免费观看| 风暴电影刘德华| 善良的女同学中字| 电影热搜| 凯登大战黑人| 庆余年第二部日韩剧 | 阿门英文| 年请的母亲4| 跟我来舞蹈| 熊出没之夺宝熊兵电影| 《私人航空》在线看法国 | 台剧黛比浪漫女家教3免费观看全集| 女的代价| 大宋少年志1免费观看| 家庭教师59| 瑞士航空空姐4| 忍者龟1| 舞力对决国语| 巴啦啦小魔仙2| 兔子先生第一季6期免费观看| 记忆之城演员表| 求求鬼别吃我| 好先生23| JUL945丈夫不在| 两个男孩子做不可描述的事| 闯天下 电视剧| 总统夫人星克莱尔完整版电影| 机甲兽神第一部| 最初的相遇1到40集在线观看| 少年包青天第二部| 女子在足浴店被技师弄晕| 狗剩快跑45集完整版免费播放| 白昼之月电视剧完整版在线观看| 《恋爱女子宿舍》| 孙老倔的春天倩倩| 食物链4大尺度原声版| 小丑在线| 男人女人愁愁愁电视剧免费| 柯南剧场版全集免费观看| 米小圈把李黎亲哭了| 猴子历险记| 河南男子与猪结婚引争议| 19岁大学生真人电视剧第12| 播放哪吒| 禁忌的诱惑电影| 《女销售的秘密》| 有罪之身| 图书馆女友2季动漫观看| 日本JIZZ| 我爱神仙遮国语| 新水浒传高清| 日剧渣男前任求复合| 拜托 小姐| 我的父亲风华绝代短剧免费观看| 新入职女员工的滋味完整版| 小马宝莉动画片全集免费中文版| 捉鬼有限公司| 《孤岛惊魂》| 房奴试爱第一季电视剧开头原声| 年轻的小姨子在线播放| 刀郎经纪公司回应新歌争议| 白夜追凶第三季| 《维修工的艳遇》金美贤 | 《诱人的岳 》中字| 爸爸去哪儿第一季免费观看| 孪生兄妹| 王牌部队在线观看| 豪门盛宴背景音乐| 激战厨房4美国| 至尊弃少都市:无人敢惹短剧全集| 致命弯道8免费看| 时光正好免费观看全集| 揭阳市| 韩国金银瓶电影在线观看| 勇敢的心直播| 狼群资源在线高清免费观看| 丢作业的秦朗家人回应| 黛博拉满天星三部曲| 余罪第100集日韩版第9集剧情介绍| 刑警队长| 女教授的隐密魅力| 断刀 朝鲜战场大逆转| 加勒比海盗女版1观看| 部长出差电视剧免费观看| 夫妻生活日记| 奥特曼大电影国语| 甄嬛传高清在线观看免费完整版| 《儿子的同学》大结局| 黑白配美国版在线观看完整版| 樱蓝高校男公关部| 正者无敌演员| 一念永恒第一季在线观看| 花与蛇2| 女婿爱上母娘免费版电视剧2| 没落贵族琉璃川动画片| 天龙高清远古电视剧在线观看 | 和部长一起去出差美国 完整版 | 赌圣3无名小子国语| 《双女任务》完整版电影| 电车之狼R通关攻略| 父亲的爱情| 果果别动队| 我的美女教师1视频在线观看| 加勒比海盗女海盗1在线看免费完整版 | 美国灭火宝贝电影| 猫狗大战1在线国语免费观看| 庆余年第一季在线观看| 爸爸我需要你的种子| 八犬传东方八犬异闻第二季| 灵与欲百度影音| 白鹿原全集免费版视频| 激战酒店1—5免费| 售楼小姐韩国电视剧| 我和黑帮老大的第365日| 年轻人在线播放| 不归路在线完整版观看| 麦乐迪在线观看| 插曲的痛全集免费| 电影壮志凌云| 女皇之刃下载| 刚结婚陪部长出差的日子日剧电影| 高清《背叛》电视剧| 追鱼传奇全集| 酒店1至5集免费| 越剧电影五女拜寿| 赵本山小品相亲| 西游降魔篇高清完整版| 正在播放: JUL-945 在没有丈夫的平日里,我被打工归来的无与伦比的岳父强奸, | 正在播放: JUQ-150 五日无夫,命禁欲至初一夜。不想要的政治联姻,岳父的目标是 | 爱情图鉴之暗恋| 熊出没之过年2部| 鹿鼎记 电影| 《八尺夫人意大利满天星》完整版| 已婚女人下午中文版| 微笑时你很美电视剧在线观看| 法医秦明| 阿信的故事电视剧在线观看| 命运交响曲电视剧| 麻生香织和黑人无删减版观看 | 女子寄快递丢失4800元手镯| 三年成全在线观看免费观看影视大全 | 高压监狱在线观看法版免费| 北大教授王福重| 黑色的眼泪,麻生香织| 村枝普通话版| 平安唱的我爱你中国| 电视剧陆贞传奇全集| 血中悍刀行| 美国新版娃娃脸9| 四少妇按摩记2| 等着你回来粤语| 我推的孩子动画免费观看全集 | 《金花瓶》完整版西门庆| 蜜桃成熟33d 下载| 岁月风云之雄霸天下| 免费看情人网站| 天海翼播放| 人间世第二季| 再生缘李冰冰| 巴厘岛的故事电视剧免费观看全集 | 罗宾汉2010版电影| 风烟滚滚| 终极斗士3| 漂亮的小瘦子| 疯狂的性西班牙| 逆转女王韩语中字| 双肥临门| 奇兵电影| 巨鳄风暴完整版电影免费观看| 全职高手动漫在线观看| 玉浦团2| 韩国电影 好姑娘干 在线观看| 演员李桓| 斗罗大陆免费观看视频| 美姐妹很努力| 新方世玉电影| 母乳喂养宣传片10分钟| 高清《错爱2》短剧汪语琴免费观看| 香港桃色凶器| 蛇舌电影在线完整观看| 地味变2未增删樱花米粒米粒| 陈家洛出场音乐| 与讨厌的部长一起去出差旅在线免费观看 | 鬼女魔咒| 高中英雄们| 斗罗大陆第169集免费观看完整版| 女超人麦乐迪全集免费下载| 赤足惊魂下载| 斗罗大陆205在线观看| 长相思第2季电视剧免费完整版| 莫妮卡演过巜生殖按摩电影吗| 爱的奇迹电视剧| 啥事佩奇| 黑帮老大和我的365天| 爱你几何在线观看完整版| 暴躁媳妇完整版| 捷克街头搭讪系列完整版免费观看| 光武大帝| 插曲的痛60集全免费观看百度云资源| 2对1:三人一次性体检日剧| 老铁APP| 道士下山 豆瓣| 禁忌5满天星凯·帕克| 女同学的滋味在线免费观看| 慈禧秘史邱淑贞| 白鹿原电视剧完整版| 千年血战篇第二季| 法国空姐2019满天星法版:星辉照耀| 防雷接地方案| 湘西诡事电影在线观看| 大决战剧情分集介绍| 天海翼搜查官在线观看| 天蓝蓝 凤凰传奇| 爷爷晒太阳安详离世奶奶抹泪| 尖叫之夜免费观看2023年电影 | 《莲花楼》| 婆婆来了 电视剧| 《爱你几何》免费观看| 秘密爱在线观看| 暖暖高清中文免费| 陪部长出差的电影叫什么名字| 乌龙元首| 战狼9欧式少女版资源| 我爱hk开心万岁国语| 笑咏春粤语| 兰坪| 巜人妻初次按摩2视频| 放学后的职员室| 神奇燕尾服| 天美影院在线观看免费观看电视剧大全 | 铁拳怒潮电影免费观看| 荒野渔夫| 同桌100网| 霹雳大喇叭国语| 《塞伦三部曲》在线观看| 南开大学实名举报| 她很漂亮韩国版| 圣天门口| 牙医姐妹在线看完整版| 从前有座灵剑山电视剧免费观看全集| 模特魅影快播| 龙胆虎威4下载| 我老婆是大佬2| 黑白配中文在线观看| 满天星小红帽| 意大利电影巜丰满的欲妇| 无结局的爱| 苦尽柑来遇见你 电视剧| 电影上位在线观看| 电影《千金与仆人》免费播放| 妈妈的味道3中字电影| 泰囧电影下载| 360大佬爱上我第二季观看| 妻子的秘密电视剧全集| 冲宫那美作品在线播放| 直到你降临短剧免费观看| 安姨《房屋售楼员》播放| 女军医》| 《查泰莱夫人的情人》电影| 《桑叶》韩版中国| 暖暖的味道| 别无选择电视剧| 酒店1—5免费| 特殊修理工艳遇| 第一放映室| 的士速递5| 善良的岳母免费观看| 果戈里起点女的被劫走是多少分钟| 女英雄堕落之水星陨落2在线观| 电影名黑色眼泪麻生香织 | 云岭茉莉白是什么茶| 美国惊悚片无人生还2012| 电视剧天眼| 少女3完整版14岁| 男按摩师论理| 樱桃红电视剧全集| 亮剑李幼斌版百度影音| 农民伯伯下乡国语版2电影在线看 21世纪爱情指南全8集免费观看高清版 | 电视剧需要爸爸播种子剧情| 引爆流行| 意大利八尺夫人在线观看| 百年遗产在线观看全集| 唐人街探案3高清完整免费| 视频| 水润女人在线观看电视剧免费| 风月变 电视剧| 陈坤 盗墓笔记| 《黑白决》免费观看| 天与地港剧| 水卜樱剧情动画图解| 杨敏思版1-5集电视连续剧| 土地公土地婆免费观看全集| 财阀家的小儿子 电视剧| 金牌冰人| 灰姑娘1977满天星原版| 剑来第一季免费观看完整版动漫| 男士胸罩| 母亲5免费高清电视剧在线看| 《法国空乘11| 甜蜜惩罚13| 演员李桓| 桃花在线| 韩国空姐2024满天星法版演员表 | 6708杏色水蜜桃| 怎样打中国结| elizabeth cambage 品味人生| 电影《逆罪》免费观看| 请回答1988第19集| 韩剧《空调维修工》剧情| 美国版《美丽的小蜜蜂》| 终极格斗5博伊卡高清| 中国诗词大会第六季第十场总决赛| 老电影生死牌| 《公的浮之手中字》免费日本电影 | 纯白色之恋| 泳池的特殊待遇电影完整版| 爱死机第一集| 替身演员全集免费| 零度战姬第二季| 高清《恶意》电影| 一艳九鼎| 爱情公寓3在线观看| 金瓶梅2百度影音| 女帝谋全集免费| 韩国三级维修师傅的艳遇| 麦子交换| 八佰壮士| 小鼠波波126集全集| 朴夏伦《传说的拉一大》下载| 飞行者百度影音| 天天躁狂AAAA| 御狐之绊| 女主麦乐迪在线观看| 寒战2粤语| 一站到底清华北大| 女英雄堕落之水星陨落2在线观 | 高清特权未删减| 电视剧我是传奇在线观看| 朴振英 honey| 激战丛林未删减版| 朴妮唛29分钟完整版| 十大奇冤电视剧| 借口 电影| 上犹县| 酒店1-90集高清免费观看| 好妈妈5韩国电影西瓜影音| 帝王之妾免费全集在线观看高清| 我的恶魔少爷电视剧|