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

原創(chuàng) 嵌入式大雜燴 2023-06-05 22:03

什么是進(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)程。(使用簡(jiǎ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再?gòu)膬?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:消息體長(zhǎng)度,長(zhǎng)度必須大于等于消息屬性設(shè)定的最大值
?*?@param[in]?msg_prio:消息優(yōu)先級(jí)
?*
?*?@return?成功返回消息長(zhǎng)度,失敗返回-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:消息體長(zhǎng)度,長(zhǎng)度必須大于等于消息屬性設(shè)定的最大值
?*?@param[in]?msg_prio:消息優(yōu)先級(jí)
?*?@param[in]?abs_timeout:超時(shí)時(shí)間
?*
?*?@return?成功返回消息長(zhǎng)度,失敗返回-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:消息體長(zhǎng)度
?*?@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:消息體長(zhǎng)度
?*?@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ā)送測(cè)試數(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ù)長(zhǎng)度
?*?@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)存長(zhǎng)度
?*
?*?@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è)置的長(zhǎng)度
?*
?*?@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ā)送測(cè)試數(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ā)送測(cè)試數(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通信庫的簡(jiǎn)單使用分享

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ā)送測(cè)試數(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)程往管道中寫入測(cè)試數(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ù)不同的場(chǎng)景提供了不同的方式,消息隊(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)資料:

注意

由于微信公眾號(hào)近期改變了推送規(guī)則,為了防止找不到,可以星標(biāo)置頂,這樣每次推送的文章才會(huì)出現(xiàn)在您的訂閱列表里。


猜你喜歡:

實(shí)用 | 分享幾個(gè)非常實(shí)用的開源項(xiàng)目

柔性數(shù)組在實(shí)際項(xiàng)目中的應(yīng)用?

干貨 | protobuf-c之嵌入式平臺(tái)使用

C語言、嵌入式重點(diǎn)知識(shí):回調(diào)函數(shù)

實(shí)用 | 10分鐘教你搭建一個(gè)嵌入式web服務(wù)器

在公眾號(hào)聊天界面回復(fù)1024,可獲取嵌入式資源;回復(fù)?m?,可查看文章匯總

嵌入式大雜燴 專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時(shí),內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!
評(píng)論
  • 光芯片,正在從光模塊的“配角”逆襲為AI產(chǎn)業(yè)鏈的“命門”2026年3月,英偉達(dá)一紙公告震動(dòng)整個(gè)光通信行業(yè)——分別向Lumentum和Coherent各投資20億美元,合計(jì)40億美元。這哪是什么財(cái)務(wù)投資,這是一次對(duì)AI基礎(chǔ)設(shè)施關(guān)鍵環(huán)節(jié)的“掐尖式”卡位。光芯片,這個(gè)曾經(jīng)被市場(chǎng)當(dāng)作光模塊BOM表里一個(gè)標(biāo)準(zhǔn)配套元器件的東西,正在成為AI產(chǎn)業(yè)鏈上“卡位”最強(qiáng)、話語權(quán)最硬的環(huán)節(jié)。一、為什么是光芯片?老黃早就把話挑明了英偉達(dá)CEO黃仁勛的原話是:數(shù)據(jù)傳輸速度已成為人工智能發(fā)展的新瓶頸。AI集群從萬卡級(jí)往十萬卡
    用戶1774416745629 2026-07-31 11:22 301瀏覽
  • 摘要防爆自控系統(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 326瀏覽
  • ?摘要:低價(jià)大流量卡正全面退市,政策收緊已成定局。面對(duì)傳統(tǒng)號(hào)卡的不確定性,隨身WiFi憑借穩(wěn)定連接、多設(shè)備共享、獨(dú)立設(shè)備和靈活套餐等優(yōu)勢(shì),成為務(wù)實(shí)可靠的備選方案。1、流量卡黃金時(shí)代要結(jié)束了通信行業(yè)正迎來一場(chǎng)前所未有的“地震式”調(diào)整——曾讓無數(shù)用戶追捧的低價(jià)大流量卡,正在全速退出各大平臺(tái)。這早已不是一次普通的競(jìng)合,而是一場(chǎng)趨勢(shì)性的行業(yè)洗牌?;赝^去,19元200G的神卡,那時(shí)真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及??扇缃瘢仡^再看,那種
    愛上電路設(shè)計(jì) 2026-08-03 10:21 128708瀏覽
  • 智能寵物用品這幾年快速普及,自動(dòng)清理幾乎成了智能貓砂盆的標(biāo)配。貓咪用完離場(chǎng),設(shè)備自動(dòng)翻轉(zhuǎn)清理,養(yǎng)寵家庭省去了每天彎腰清理的麻煩。但自動(dòng)清理的第一步,是先準(zhǔn)確判斷貓到底在不在盆里。這個(gè)看似簡(jiǎn)單的問題,在小空間里并不容易做好。近場(chǎng)檢測(cè)的痛點(diǎn):距離太遠(yuǎn)反而誤事貓砂盆內(nèi)部空間有限。如果傳感器的檢測(cè)距離設(shè)得偏大,盆外路過的貓、人甚至物品都會(huì)被誤判為貓?jiān)谂鑳?nèi),結(jié)果該清理時(shí)不清理、不該清理時(shí)亂清理,體驗(yàn)直接崩壞。這類產(chǎn)品的核心訴求其實(shí)就一句話:近距離、小范圍、精準(zhǔn)識(shí)別,不能有半點(diǎn)誤判。常規(guī)感應(yīng)方案常因檢測(cè)距離
    唯創(chuàng)知音語音芯片 2026-07-31 16:51 264瀏覽
  • 今年好幾個(gè)客戶都問過我同一件事。藍(lán)牙音頻產(chǎn)品到底用 WT2605 這種單芯片,還是老老實(shí)實(shí) MCU 外掛藍(lán)牙模組。兩種方案我都落地過,說點(diǎn)實(shí)在的,WT2605 剛出來那陣我也犯嘀咕,怕是營(yíng)銷噱頭,真拿來做完一版樣機(jī)才服氣。一、選型先看三個(gè)維度外圍數(shù)量。這是最直觀的。傳統(tǒng)做法是 MCU 加藍(lán)牙模組,再加音頻編解碼、功放、晶振和一堆阻容,板子上密密麻麻十幾二十顆料。WT2605 把藍(lán)牙、解碼、功放全收進(jìn)一顆,外圍就剩少量被動(dòng)件。開發(fā)周期。傳統(tǒng)方案得自己接藍(lán)牙協(xié)議棧,配網(wǎng)、A2DP 解碼、音頻通路一一
    唯創(chuàng)知音語音芯片 2026-07-31 16:35 398瀏覽
  •     長(zhǎng)期專注WiFi領(lǐng)域,也算是行業(yè)老兵了!同行閑聊中,時(shí)不時(shí)能提起我和我們!從疫情起,國(guó)產(chǎn)替代風(fēng)生水起,起起落落,大浪淘沙,生存下來的都是強(qiáng)者!    WiFi模塊應(yīng)用廣泛,對(duì)于高端市場(chǎng)和特定市場(chǎng),要求WIFI模塊需要過CE/FCC之類的認(rèn)證,也就是說沒有認(rèn)證的模塊,不具備導(dǎo)入產(chǎn)品設(shè)計(jì).接下來就和大家聊聊認(rèn)證模塊選型參考!    WIFi模塊硬件方面主要考慮以下九點(diǎn)特性:    1
    納拓科技 2026-07-31 17:56 188瀏覽
  •         很多人拆解醫(yī)療設(shè)備時(shí),只會(huì)關(guān)注傳感器、主控芯片這類核心部件,卻忽略了電路板上不起眼的晶振。作為整個(gè)醫(yī)療系統(tǒng)的時(shí)間基準(zhǔn),晶振的精度、穩(wěn)定性直接決定了測(cè)量數(shù)據(jù)的準(zhǔn)確性、設(shè)備的運(yùn)行安全性——比如監(jiān)護(hù)儀的采樣頻率偏了1ppm,血氧、心率的讀數(shù)就會(huì)出現(xiàn)系統(tǒng)性偏差;膠囊內(nèi)窺鏡的時(shí)鐘漂移超標(biāo),圖像傳輸就會(huì)出現(xiàn)丟包、花屏。不同醫(yī)療場(chǎng)景對(duì)晶振的要求天差地別,沒有一款晶振能通吃所有設(shè)備,每一類醫(yī)療設(shè)備背后,都有一套針對(duì)性的晶振選型邏輯。1. 家用便攜監(jiān)測(cè)設(shè)備:
    TKD泰晶科技 2026-07-31 08:24 499瀏覽
  • 行業(yè)痛點(diǎn)凸顯,飛凌嵌入式FET3572-C重磅登場(chǎng)工業(yè)4.0與AIoT發(fā)展下,嵌入式核心板作為設(shè)備“工業(yè)大腦”,面臨性能與功耗的雙重考驗(yàn)——既要支撐復(fù)雜算法和多路數(shù)據(jù)處理,又要兼顧便攜設(shè)備、工業(yè)終端的低功耗需求,傳統(tǒng)核心板“高性能必高功耗”的困境制約設(shè)備升級(jí)。為此,飛凌嵌入式推出基于RK3572處理器的FET3572-C核心板,以2×Cortex-A73+6×Cortex-A53八核架構(gòu)為核心,實(shí)現(xiàn)“性能翻倍、功耗減半”的突破,為中高端嵌入式場(chǎng)景提供優(yōu)質(zhì)算力底座。八核異構(gòu)架構(gòu),解鎖性能功耗最優(yōu)解
    飛凌嵌入式 2026-07-31 09:47 192瀏覽
  • 在芯片總成本中占比不到 1%,卻可能因一處品質(zhì)偏差導(dǎo)致整片晶圓報(bào)廢——半導(dǎo)體切割/研磨膠帶,正隨著先進(jìn)封裝的爆發(fā),成為封測(cè)產(chǎn)線選型中最謹(jǐn)慎對(duì)待的耗材之一。但鮮有人注意到,決定這層膠帶性能上限的,是上游一層更薄的基膜。這個(gè)長(zhǎng)期由日本企業(yè)主導(dǎo)的隱形環(huán)節(jié),正在出現(xiàn)國(guó)產(chǎn)突圍的信號(hào)。一、需求之變:先進(jìn)封裝與“韜定律”重塑膠帶市場(chǎng)AI 算力芯片、HBM 高帶寬存儲(chǔ)、Chiplet 芯粒等先進(jìn)封裝產(chǎn)品持續(xù)放量,國(guó)內(nèi)封測(cè)產(chǎn)線擴(kuò)產(chǎn)節(jié)奏不減。作為晶圓減薄與切割工序的必需耗材,晶圓膠帶的需求同步擴(kuò)容。據(jù) QYRese
    芯膜前沿 2026-07-31 16:35 322瀏覽
  • 摘要在防爆電氣設(shè)計(jì)中,只參照芯數(shù)選型而忽略額定載流量,長(zhǎng)期滿負(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 128507瀏覽
  • 在EMC測(cè)試過程中,傳導(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 396瀏覽
  • Synopsys 這次沒有再給行業(yè)看一條只能站在展臺(tái)邊圍觀的 demo。7 月 27 日,Synopsys 在 DAC 2026 期間公布兩條 autonomous EDA workflow:一條處理 debug closure,另一條處理 implementation and closure。客戶可以通過 Synopsys 申請(qǐng)?jiān)?Microsoft Discovery 上評(píng)估,AMD 正在評(píng)估這些工作流能否用于下一代產(chǎn)品開發(fā)。公告里最扎眼的是 25%–40%。Synopsys 稱
    麒芯說AI 2026-07-31 14:21 191瀏覽
我要評(píng)論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請(qǐng)使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 神犬小七第三季免费观看完整版| 爸爸的种子高清免费版| 双子星公主 第2部| 血腥茱莉亚| 金粉世家电视剧免费观看| 爱我多深莫妮卡| 女友的妈妈 双字ID| 疯狂原始人 720p| 周弘版《村枝》MV免费观看| 妈妈的秘密大结局| 她很漂亮韩剧高清在线观看| 踏血寻梅 百度云| 小日子在线观看全集免费高清版| 思春期的钢铁处女| 女娲传说之灵珠剧情介绍| 鞍海快客车祸| 同乐会 台剧| 电影《恋爱的味道》的简介| 勇者无惧剧情介绍| 憨豆先生全集| 勇者大冒险第一季| 小柔的性放荡羞辱日记动漫 | 驯服美嫂| 美国电影保镖| 欢颜电视剧免费观看| 保山在线| 鬼影泰国版电影| 宇宙天魔| 邻居少妇太爽了A片无码小说| 电影《美容院的特殊待遇》5纹身女演| 超级魔术师克里斯| 《学生的妈妈2》中字头歌词| 电影天赐| 我爱男闺蜜迅雷下载| 《法国少女农场》在线电影| 暴雪时分电视剧免费观看完整版 | 腓尼基计划未删减| 暖暖 在线 观看 免费 高清| 女子消防队满天星在线观看视频| 越狱兔第5季| 野兽家族| 法国《啄木鸟:灭火行动》免费观看| 幸福爱人全集| 驻港部队第23次轮换| 战狼六女版免费观看| 1980法国空乘| 电视剧折腰免费看| 动感妖精| 电影猩猩王| 近距离爱上你第七集| 无所畏惧第一季电视剧免费观看| 韩剧《妈妈的女儿》| 女超人(麦乐迪)| 被夫上司持续入侵大桥未久| 吴健版农民伯伯国语版在线看| 茶啊二中电影| 勇者的故事| 准备好纸巾的舞蹈| 上海出轨女老师| 妻子秘密全集| 无线电春宫| 高清《失窃的女孩》电视剧| 我的好朋友瘦子8| 步步电视剧| 别和陌生人跳舞全集| 美乃雀 替夫还债的电影免费观看| 临时劫案在线观看免费版| 坎贝奇《无憾》| 后藤えり子| 小红帽满天星| 张本智和领奖台上唱国歌| 《最高的爱人诏》三上解说 | 开封奇案电视剧全集免费观看| 长月无烬电视剧免费观看| 爱我几何无删减版| 韩国电影后宫| 人鱼小姐全集| 麦乐迪和继父演的电影是什么| 幸福密码全集| 养鬼吃人8| 法国空乘1980版未删减版下载 | 《法国空乘5》在线看| 都行广告| 爱恋205| 法国女超人无删减在线观看| 哥布林的窑洞第一季| 原声喘息请戴好耳机| 电影爱你几何在线观看免费| 樱兰高校男公关部真人版| 爸爸需要播种| 杜兰特电影| 韩剧 为人民的服务| 爱他美奇迹白罐| 麦乐迪在线观看完整免费| 养个孩子不容易 电视剧| 女人当官电视剧全集| 双人调情按摩术hd在线播放视频| 暴走大事件第五季36| 韩国同学会| 和部长出差的日子免费观看| 笑咏春国语| 兵人电影| 李丽珍在线电影全集免费观看| 浮之手| 北原多香子无打码在线观看| 《高压监狱2》完整版| 超级变变变中文版全集| 法国版《少女绣感》| 重返猛鬼屋| 《姊妹牙医》完整版在线播放免费观 | 《安娜和父亲》麦乐迪| 西出玉门几点更新| 欧美男男video在线观看| 商务旅行戴绿色帽子电影| 夜游生活| 红罂粟第三部| 天神地兽神兽金刚全集| 电影需要爸爸播种子| 幼儿园男童送女孩200克金条| 人生若只如初见 奈何情深缘浅| 电影古墓丽影满天星法版| 索多玛120天剧情| 意大利电影《忠贞》2| 想要爸爸播种手机播放美国电影| 高清《刘三姐》电视剧| 如果还有明天电视剧| 曲松县| 景甜被罚没722万| 高清《为你遗憾》电影| 妈妈的职业5完整版结局在线看免费| 给我一碗小米粥| 完美世界dj| 静海县| 神奇女侠电影免费完整版观看 | 就算是爸爸也想未增删6分多钟| 莉莉库拉格《女版满天星》| 电影白蛇浮生| 大男当婚 优酷| 黄秋生《雨夜屠夫》国语| 蛮荒种田全集免费| 《快乐到死》电影| 公浮之手电影在线播放完整版| CAROLINEDUCEY| 郭全宝单口相声| 天美乡村影院免费观看电视剧| 信仰电视剧免费观看完整版| 狂野式到轮式的转换技巧| 高清《家庭计划2》电影| 程女士1V3海外| 长安的荔枝免费播放| 高清《妻子6》在线观看 | 世界第一初恋剧场版| 世仇爱恨:最终和解短剧全集| 巜饥渴的人妻与维修师傅| 偷窃的下场(凯·帕克)英文在线播放 | 记忆之城演员表| 《凤凰台上》免费观看| 最近妹妹有点怪真人电影观看人数 | 跟着书本去旅行纪录片观看完整版| 丫头 5| 脉开头的四字成语| 移山倒海樊梨花全集| 左云县| 汤芳最出位下部| 韩剧国语版面包大王| 不一样的美男子预告7| 木下免费在线观看| 《夕颜》动漫番剧全集| 危险的她| 哇嘎嘎电影高清观看| 今夕是何年电视剧免费观看| 有只僵尸暗恋你下载| 蛮好人生免费看看| 炸天小姐1983完整版| 蔡琴如梦令| 陷阱韩剧完整版免费观看| 北条麻妃熟女在线观看AV| 交换3国语版普通话| 南北妈打演员表| 《我的姐姐》免费观看电视剧韩剧| 克罗斯凯登电影| 繁星四月电视剧| 洪武大案下载| 视频列表--蜜桃 - 17| 拜托小姐在线观看| 无彩限的怪灵世界| 《G点》1985欧美在线观看| 抗美援朝保家卫国纪录片| 西厢夜谭| 元江| 爱情理论免费观看| 少年派2正版全集免费观看| 韩剧朋友| SONE-367本乡爱在线观看| 少年嘉庆电视剧| 外出3免费观看完整版| 《法国航空3》电影| 心理罪 电影| 少帅的秘密情人| 火线三兄弟高清全集| 最新一期奇葩说| 狙击枪怎么折| 萌宠撒欢节| 甜蜜惩罚13| 新白发魔女| 《背叛老公的社长夫人》最新电影在线观看 -西瓜电影免费播放 -灵蓄影院 | 高清《秘密》电影全集| 斗罗大陆206集免费观看| 光环美剧| 绝密1950在线观看| 娘家的故事第3部| 魔女的侵袭| 电视剧丈母娘来了全集免费观看| 黑帮老大和我的365天| 迷人的新娘| 亢奋第一季美剧| 乌云之上电视剧在线免费观看| 《万》观看完整版| 九九电视剧| 我是特种兵之| 唐朝诡事录超清免费观看电视剧| 无人区在线观看免费| 初五启市录粤语版| 庆余年下载| 灵魂摆渡二季完整版在线观看| bt5156无忧无虑| 工作女郎克拉拉测试视频原版 | 《狂飙》在线| 电影爱你几何在线观看免费 | 美国街头篮球| 姫様限定| 白峰美羽大战黑人在线观看| 文豪野犬第四季免费观看简体中文| 一个小山村的故事| 孙悟空白骨精| 村里来了洋媳妇| 职业替身泰剧| 金瓶梅TV| 边防风暴| 意大利电影《肉蔻之香》的简介| 电视剧冒牌英雄| 名侦探柯南724| 隋唐英雄68| 免费看神印王座| 在线播放需要爸爸播种子 | 《维修工》王李丹妮在线观看| 假面骑士圣刃免费观看中文版 | 第一滴血5免费观看完整版电影高清 | 恩师情深电影| 电影 保镖| 《妻子的选择》| 南京撞人| 性生活伦理电影| 间谍过家家樱花动漫| 快乐到死电影完整版百度影音| 电影《香醇的绣感》男主吴绮珊 | 酒店第1-100集免费观看| 百万新娘之爱无悔61| 至尊马蒂| 漂亮的保姆韩剧免费完整版高清| 赌侠2上海滩赌圣| 翁虹《满清十大酷刑》| 火线传奇3| 美版武则天最惊艳的版本| 书卷一梦电视剧免费观看完整版| 需要爸爸播种籽电影2| 水怪2黑木林电影免费观看| 爱我的请过来| 还珠格格 电视剧| 台湾经典《渔夫荒野史》| 你微笑时很美23集免费观看| 小东西我们站着做| 男性按摩师| 一起来看流星雨电视剧免费全集| 《从指尖传出的热情》2| 3d版玉蒲团| 私生女逆袭全集免费| 男人女人一起愁愁愁电视剧观看| 私家车跑滴滴怎么加入| 电影需要爸爸播种子电影在线观看| 血战摩苏尔| 孔雀王动画| 发誓英语| 天堂午餐| 《激战丛林》完整版免费观看中文字| 名侦探柯南迅雷看看| 伦理《法国护士》| 绿茶婊微电影| 江城| 阴阳路之一见发财| 美女贴身保镖短剧免费观看全集| 农村姑娘免费观看高清电视剧| 儿媳忠于本能女主角是谁| 黑暗荣耀 第二季 电视剧| 斗罗大陆165集| 柯南万圣节的新娘| 《我和我的父辈》沈腾| 《麦乐迪女超人》完整版美国| 照亮你电视剧免费观看星辰影视 | 算计七天的死亡游戏 | 登陆之日豆瓣| 飘渺尊之旅| 星克莱尔的《第一夫人》在线观看 | 电影《姐妹花》免费观看国语| 非诚勿扰2023年最新一期| 我的大胸继拇6| 完全婚姻手册| 黄日华个人资料简介| 性感海滩3去码补丁| 伯爵夫人2满天星| 长空之王电影| 河东狮吼插曲| 《需要爸爸播种美国》演员全名| 入室暴行3被蹂躏在线观看| 电视剧《心跳》| 越南mv落花流水| 1995年意大利版《人猿泰山》高清版 | 木子檀在线观看高清版| 女女女hd| 战狼六欧式少女版资源| 罗十五原创动画8一30集| 斗破阴阳宅电影免费观看| 年轻的妈妈观有限中字| 哭泣的牛| 战娘6全集在线观看| 《恋爱禁区》电影| 邹平县| 照亮你电视剧在线观看| 第一个无产阶级政党| 部长来家| 天堂之吻电影版在线看| 墨西哥剧瓜达卢佩的玫瑰免费观看| 电影月朦胧鸟朦胧| 《爵迹》| 麻衣神婿电视剧在线观看| 老公我要电影免费观看| 插曲的痛30集全集免费播放电影下载| 小姨多鹤| 《维修工人的艳遇》1| 血沃丰碑| 外乡人电视剧在线观看免费全集| 新人类毒医肥尸电影| 警察智斗外星人| 最后一枪全集在线观看| 火兰刀锋| jizz日本大全| 小姨子免费观看| 意大利《玛丽!玛丽!》满天星| 涿州市住建局| 网上购物社区| 美国ZzzOooxxx视频| 卑触家的规矩| 唐朝秘史| 年轻的继拇 主演| 上海第一财经广播| 《荒岛女儿国》在线观看| 西环浮尸| 一起飞电影完整版百度影音| 男人女人一愁愁愁愁免费看电视剧| 天师钟馗3| 昼颜 电影| 爰你电视剧免费观看| 长津湖2021在线观看| overflower第一季在线观看免费全集| 欲海情魔无删减完整版在线播放| 《法国空乘10》观看| 老公不知情电影| 中文字Dl幕岳在线观看 | 叛逆者在线观看完整版电影| 天空之手| 无敌僵尸王 电视剧| 斧头帮音乐下载| 深海狂鲨3| 斗罗大陆全集免费观看完整版动漫| 二十一世纪性格爱情指南| 栋笃神探结局| 法国版《女超人:麦乐迪》在线播放日 | 传家电视剧免费观看| 七龙珠第一部| 新人类之1《毒医肥尸》| 海边的女人下载| 美景之屋6在线观看| 爱情魔发师电视剧| 清洁工第一季| 密桃荷尔蒙| 湖南经视故事会| 《急诊护士》法国版电影在线播放完| 浴血黑帮:不朽传奇全集观看| 蓝色隐身帽子在线观看| 精装追女仔2004国语| 古剑奇谭未删减版有什么区别| 香醇的绣感在线观看完整版| 电车魔女2| 小猪佩奇的动画片| 行尸走肉第三季第三集| 强伦轩办公室女教师hd| 小张帝现场搞笑| 欢乐颂5| 新包青天吕良伟版普通话| 黑白配HD版大全免费观看 | 幸福密码在线观看| 年轻的瘦了5| 奥司他韦可以和布洛芬一起吃吗| 宝贝试着感受我| 二十一世纪性指南| 孔雀舞曲| 爱我几何《莫妮卡》| 约会大作战第一季| 容嬷嬷的小黑屋| 插曲的痛30集全集免费| 一念永恒第三季在线免费观看| 爱情男女全集免费观看免费| 西行纪第三季在线观看| 高清《侦察兵》免费观看| 七根心全集在线播放免费| 我们的爱情不正常| 《法国空乘2016》完整版| 后营露营无增减2季| 逐玉电视剧| 地铁举行集体婚礼| 莫莉3特别酒店免费| 惊变电影未删减版免费观看| 穿靴子的猫第二季国语版| 绽放 孙佳仁| 束缚游戏观看| 至尊食王电视剧免费观看| 鬼吹灯之精绝古城在线| 那什么拯救你我的爱人| 卖房子的女销售员1| 一念天堂免费观看| 良医第一季在线观看免费完整版| 轮到你了第9集| 法国女子高压监狱完整版在线观看完整免费高清原声 | 日剧skill lab网站| 法国空乘11完整版在线看| 金石良缘剧情介绍| 《盒子屋》电影在线观看| 堕落前辈动画第一季樱花动漫免费| 浪漫黛比| 私人女性监狱变态版在线观看| 电视连续剧暗战| 女教师波多野结衣在线播放| 360大佬爱上我第三季| 想要爸爸播种子在线观看| 黄晓明和宋慧乔演过情侣| 小姐在线看完整韩剧| 萨嘎县| 电影《以色列女狱警》在线观看| 说散就散 下载| 履霜坚冰至| 萌宝神助攻电视剧免费观看| 倔强驱魔师动漫完整版| 青丝APP| 《原始人》电影免费观看| 电视剧我哥我嫂| 黄色仓库在线观看天堂| 极限挑战第二季全集免费| 互助| 错缘在线观看| 黑人RAPPER大全 顶级 | 美丽的小蜜蜂3美丽人生| 营改增账务处理| 爱神百度影音| 唐人街探案3 提取码| 韩国伦理维修工的艳遇 | 法国空姐1免费高清原声我奔跑| gv男优| 赛德克巴莱完整版电影| 廊坊阳光驾校| 三年国语高清在线观看| 师姐也疯狂| 秘密人质| 电视剧上海探戈| 《美妙的爱情》| 行尸走肉第二季12集| 善良的嫂子同居的日子| 男子吃月饼咬到螺丝磕坏2颗牙| 妙手房术欧洲版演员表 | 古天乐意外电影在线播放免费| 飞虎出征电影| 香肠派队下载游戏| abo成结模拟| 电影南拳王| 李丽珍爱的 精灵| 国足vs乌兹别克斯坦| 海之声完整版973| 电视剧 国家命运| 2025《哪吒3》在线观看| 东北黑道风云20年全集| 需要爸爸| 女版唐三藏2免费资源 | 圣少女玩具| 黑白配高清大全免费| 黑大粗大战俄罗斯美女| 大象电视剧| 《仙剑奇侠传三》电视剧| 《我是妈妈》1-60集| 日本轮理电影女儿国3| 了不起的挑战第五期| 金瓶梅电影完整版在线观看| 浪浪人生未删减| omoflow| 甲午风云| 十大奇冤电视剧| 小蜜桃4| 山丹县| 《莫莉特别的酒店》电影在线观看 | 天峨县| 十三罗汉| 克莱尔之颤光剑| 王多鱼打扑克免费在线观看视频| 浪客剑心追忆篇免费观看完整版| 国光帮帮忙沈玉琳| 美食的俘虏110| 24小时末路重生在线观看完整版| 年轻继牳4三级| 这公司有我喜欢的人动漫完整版| 电影恶行之外| 禁忌4年转一代中文字母| 爱在空气中第四集| 南洋十大邪降| 斯巴达第四季24集剧情详解| 小女花不弃电视剧免费播放| 漂亮的小瘦子3| 美国忌讳1~4| 东北插班生免费观看全集| 美国伦理生殖按摩在线| 火山高校国语| 天天躁日日躁狠狠躁午夜剧场 | 星期三第二季在线看免费观看| 白峰601电影免费观看| 东方红的简谱| 免费拗女稀缺资源观看| 铁齿铜牙纪晓岚二部全集在线观看 | 伊甸园之东国语版| 战狼6免费观看完整下载| 非诚勿扰20140322| 电影恋爱的味道| 电影:熟睡被义子侵犯| 漠风吟电视剧在线观看| 黑玫瑰红玫瑰| 楼上的邻居在线| 美式禁忌3| 年轻的保姆5线观高清多鱼| 好姐妹高清在线观看免费全集| 巨大粗壮两个JJH| 朱之文星光大道初赛| 妻子8免费完整高清电视剧在线| 暗恋者的救赎| 异形魔怪3| yellow视频免费观看| 铁道游击队战后| 玉观音高云翔版| 法国女超人麦乐迪满天星版本 | 斗破苍穹148完整版免费观看 | 《新上任的秘书》演员表| icegirl| 联姻五年后她重生了短剧免费全集| 法国少女农场2中文版在线观看 | 黑暗终结者百度影音| 星克莱尔全集在线| 正中下怀的意思| 不过是上班未删减| 斗罗大陆免费完整版| 《无处藏身》电视剧| 卖房子的女销售员1| 电影匹夫| 新生悬疑剧在线观看| 法国满天星八尺夫人| 电影 赎罪| 一锁五十年| 法国航空6| 爱的合体1982法国| 狂欲的庄园| 社长夫人的美貌电影免费观看| 泰国租妻价格| 台风刮来生蚝?居民捡200斤| 插曲的痛30集免费观看第二季| 暗黑西游记| 碟中谍3在线观看完整高清免费版| 渔女实战2观看| 韩版甄嬛传| 西出玉门几点更新| 《北越暴行》3| 胡同在线观看全集完整版| 斗破苍穹动漫第二季| 战狼4免费999加拿大版| 暖春小花电影版| 黄晓明安以轩| 白峰电影全集免费看| 太太度假时| 赏金猎人皮肤| 八戒八戒10在线看免费观看完整版| magnet舞蹈| 外国人那东西太大进不去| 傲斗凌天v20| 电影女律师替丈夫还债| 高清《狙击手6》在线观看高清 | 人猿泰山h1995未删减意大利版在线 | 美国家庭式忌讳1-4古装| 高清《诱人的护士》韩国| 黑暗边缘在线观看完整版免费高清| 青楼名妓电视剧免费观看全集| 大决战一共多少集| 女神降临免费观看全集| 解密性| 毕福剑歌曲100首| 某某电视剧在线观看全集免费播放| 美姊妹努力免费观看完整版电影高清 | 甄嬛传全集免费版在线观看完整版| 总统夫人的夜晚在线播放| 不扭扣的女孩| 高清《满意度》电影完整版免费观看| 《村枝》周弘版高清版 | 21世纪性格爱情指南俄罗斯| 梁祝艳谭电影全部播放| 三年中国中文高清免费观看| 私人女性监狱HD| 傻儿军长| 最美情侣国语版免费观看在线| 上海大学生周末兼职| 大街上强?在线观看| 在爱中疯狂| 英国空姐免费完整版| 企业强人粤语版免费观看| 97社| 一路上有你2| 电视剧麦香| 完美婚姻的定式首播| 一个好妈妈的D6申字 | 契卡 高清下载| 姊妹牙医 在线看完整版免费| 米小圈上学记电视剧| 《炸天小姐》在线观看美国| 萌学园之萌骑士传奇全集| 小猪佩奇mp3| 姜子牙在线观看| 战狼6欧式| 夏天全集在线观看免费| 亲爱的孩子们一共多少集| 航空特殊待遇在线完整版| 庆余年第二季欧美剧犯罪片 | 国王的演讲下载| 世上最不得安人3完整版在线观看| 华容县| 美国电影售楼女王在线观看| 僵尸伯伯国语版在线播放| 脱缰者也全集观看| 强者风范| 最高的爱人诏| 映山红简谱| 正方体怎么画| 卖房子的女销售电影| 狂飙免费观看完整版电视剧高清| 陈浩民版西游记1| 武冈市| 北越《性的暴行》2| 春日狂热| 铠甲勇士帝皇侠| 我的游泳教练在线观看| 橘子红了电视剧全集在线观看| 新金银梅5一10普通话| 间之楔旧版| 复仇者联盟3神马抢先版| 战狼6欧式少女全集资源| 我叫赵甲第第二季电视剧| 僵尸之地国语| 完美无瑕在线观看| 金银悔1-10集在线播放| 三妹在线观看免费观看| 透明时装| 京东塔之越南俘虏营在线观看| 隋唐英雄传电视剧| 黑白潜行| 黔西| 狂飙免费观看全集完整版高清| 奇妙萌可第四季免费观看| 憧憬成为魔法少女第二季| 黑人大屌大战美女| 沉香如屑开播| 大象席地而坐免费| 维修工人的艳遇韩国电影| 仙帝弃少短剧全集| 真相2021电视剧在线观看| 麦乐迪女超人在线| 隐形战队大结局| 高清《姐弟恋》动漫免费观看全集| 牙医姐妹在线播放| 无名天使3d高清| 猎狼连线| 漂亮的瘦子2025| 给你生命给我爱大结局| 恩娇 电影| 战火熔炉在线观看| 坏性:被强奸的妻子| 我的青梅竹马是消防员樱花动漫| 东陵大盗电影全集| 娃娃脸4| 大宋惊世传奇电视剧| 欢乐颂第一季在线观看免费高清| 灭火宝贝未删减版| 锵锵锵锵锵锵锵免费看电视剧| 猪猪侠视频| 高清至尊马蒂未删减| 替弟还债| 电影空姐| xingai电影| 国产做aj的视频大全电视剧| 玩世不恭什么意思| 日剧second love| 金星秀胡歌| 售楼部的秘密电影完整版| 广场舞豆芽菜的爱| 成仁高清影视| 金银悔| 超级床上| 拯救大兵瑞恩| 凡人修仙传159集在线播放| 微电影妈妈的职业| 少林七崁| 电视剧前妻回家| 锵锵锵锵锵锵锵锵电视剧在线观看 | 怒火重案电影免费观看完整版| 寻秦记电视剧| 满天星女版《壮志凌云》| 法国女仆在线观看| 康熙王朝电视剧免费观看| HD在线观看免费完整版电视剧安斋拉拉| 菲梦少女第二季免费| 快乐之家1980意大利版| 暗夜逐仇| 做aj免费高清电视剧观看| 许我耀眼在线免费观看| 节的笔顺| 与部长出差中文电影| 千年之狐| 公司职员 电影| 学生妈妈的麦子| 女人的战争免费观看| 小橙子姐姐| 终极一班3部第一集| 黑桃视频| 热带雨在线观看完整版免费高清| 佩恩袭击木叶| 日剧《水手服的饲养》米亚希谁演的| 亮剑的主题曲| 《大侦探 第十一季》未删减| 三年中国中文高清免费观看| 尸奶俱乐部在线| 老公说想放在里面睡觉| 为人民服务 高清| 二十一世纪性格爱情指南| jux-422| 女体统电影完整版免费观看高清| 新继拇7完整版| 女职员的付出5中字| 沸腾的群山电视剧在线观看| 壮志凌云女版凯登克罗斯百度网盘| 《蓝帽子》电影免费观看| 禁忌2电影在线观看| 夏夜韩剧在线播放| 需要爸爸的种子电影在线观看| 《我的漂亮朋友》电视剧| 新视觉6080| 梧州市| 继母麦乐迪马克思| 二毛驴传奇免费观看全集完整版| 血中悍刀行| 一起愁愁愁免费观看完整版在线观看| 情事1991在线观看| 电影花与蛇| 糖心在线观看免费高清| 赛伦电影成人版无删减| 新金银2008普通话版| 人头豆腐汤在线观看| 李灿森结婚| 《一对二》姜汉娜出场时| 重逢丈夫的下属是初恋在线观看| 乞丐王子国语版全集| 了凡四训1一23集连续剧免费观看 韩国年轻的母年轻线在6 | 女战士满天星免费观看完整版 | 香香公主| 赤子板栗电影在线观看| 高清午夜之花未删减| 一夜不了情| 《德国女子护卫队:满天星》在线观看| 大地电影在线观看| 白话易经| 爱情公寓ii| 欧美电影满天星萨迪萨默斯| 花开有声电视剧全集 | 战狼9免费高清版999| 天美影院在线观看电视剧网站| 斗罗大陆2在线| 盲心贵女短剧在线观看免费全集| 女员工在付出5中字| 人民的名义电视剧| 越狱兔第5季| 花房姑娘第三季全集下载| 日韩电影修理工的骚扰| 一夜丈夫 电视剧| 聚会的目的1在观完整有限中字| MDSR-0006-2 小凤新婚| 爱情公寓2 下载| 探长欧光慈| 红衣美女| 《女仆日记》法国版| 疯狂的石头免费观看完整版电影| 谍战深海百度影音| 一闪一闪亮晶晶 电视剧| 韩国金银瓶电影在线观看| 庆余年22集| 谍海计中计结局| 蒲松龄国语| 97社免费| 捉妖少女短剧全集| 百家讲坛项羽| 罚罪电视剧免费观看全集在线播放| 《日加橹》冒险片无删减完整版-冒险片危地马拉手机在线播放-临深电影网 | 伊波拉病毒国语版电影| 苍狼剧情介绍| 伪娘电影| 情人别为我哭泣| 肢体的绣感1982凯瑟薇版| 十九岁完整版在线观看好看 | 《和部长一起去出差旅| 一起来看流星雨电视剧免费全集| 鉴宝女王:古玩市场我称霸全集免费 | 重庆公共农村频道| 恋爱先生免费观看全集| 圣特罗佩的姑娘们高清| 向井蓝在线观看| 法医秦明之无声的证词 电视剧| 王宥胜主演的电视剧| 瑟瑟屋| 高清咒术回战 第三季未删减| 欢乐岁月电影| 人生特别档案| 女律师的堕落电影在线观看| 睡美人之宅| 代号麻雀| 巨齿鲨在线观看| 黑话律师大结局第16集| 特殊的保险销售员2| 特种兵之利刃出鞘免费完整版高清 | 死刑犯电影| 十九岁免费完整版高清国语| 一闪一闪亮星星电影| 能登的新娘| 生化危机终章在线观看| 特殊保险销售员5|