多進程編程知識匯總,附代碼例子!

一口Linux 2023-08-16 11:50


什么是進程

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

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

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

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

在Linux中啟動一個進程有多種方法:

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

#include?

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

int?system(const?char?*command);

例子:通過system函數(shù)啟動一個進程,列出當前目錄下的文件及文件夾。

#include?
#include?

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

????return?0;
}

(2)通過fork函數(shù)啟動進程。(用于啟動子進程)

#include?
#include?

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

pid_t?fork(void);

例子:通過fork函數(shù)啟動子進程

#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;
}

編譯、運行:

我們使用了fork()系統(tǒng)調(diào)用來創(chuàng)建一個新進程。如果fork()返回值為0,則說明當前進程是子進程;如果返回值大于0,則說明當前進程是父進程。在父進程中,我們使用wait()系統(tǒng)調(diào)用來等待子進程結(jié)束。當子進程結(jié)束后,父進程會繼續(xù)執(zhí)行。

(3)通過exec系列函數(shù)啟動進程。(用于啟動新進程,新進程會覆蓋舊進程)

#include?

/**
?*?@brief?啟動新進程,新進程會覆蓋舊進程
?*
?*?Detailed?function?description
?*
?*?@param[in]?path:?所執(zhí)行文件的路徑
?*?@param[in]?file:?所執(zhí)行文件的名稱
?*?@param[in]?arg:?傳入的參數(shù)列表,以NULL作為結(jié)束
?*?@param[in]?envp:?傳入的環(huán)境變量
?*
?*?@return 如果發(fā)生錯誤,則返回值為?-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命令程序,與在終端上運行”ls -la”產(chǎn)生的結(jié)果是一樣的。

在Linux中終止一個進程有多種方法:

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

進程間通信方式

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

進程間通信的目的:

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

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

1、消息隊列

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

POSIX消息隊列頭文件:

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

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

消息隊列API接口:

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

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

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

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

/**
?*?@brief?指定超時時間阻塞方式接收消息
?*
?*?Detailed?function?description
?*
?*?@param[in]?mqdes:?消息隊列描述符
?*?@param[in] msg_ptr:消息體緩沖區(qū)地址
?*?@param[in] msg_len:消息體長度,長度必須大于等于消息屬性設(shè)定的最大值
?*?@param[in] msg_prio:消息優(yōu)先級
?*?@param[in] abs_timeout:超時時間
?*
?*?@return?成功返回消息長度,失敗返回-1,錯誤碼存于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:?消息隊列描述符
?*?@param[in] msg_ptr:待發(fā)送消息體緩沖區(qū)地址
?*?@param[in] msg_len:消息體長度
?*?@param[in] msg_prio:消息優(yōu)先級
?*
?*?@return?成功返回0,失敗返回-1
?*/

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

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

mqd_t?mq_close(mqd_t?mqdes);

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

mqd_t?mq_unlink(const?char?*name);

消息隊列基本API接口使用例子:發(fā)送進程給接收進程發(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;
}

編譯、運行:

gcc?send.c?-o?send_process?-lrt
gcc?recv.c?-o?recv_process?-lrt

2、共享內(nèi)存

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

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

POSIX共享內(nèi)存頭文件:

#include?
#include?
#include?

共享內(nèi)存API接口:

/**
?*?@brief?創(chuàng)建共享內(nèi)存實例
?*
?*?Detailed?function?description
?*
?*?@param[in]?name:?要打開或創(chuàng)建的共享內(nèi)存文件名
?*?@param[in] oflag:打開的文件操作屬性
????????????????????-?O_CREAT:?創(chuàng)建一個共享內(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,錯誤碼存于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)限(保護屬性),包括PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE
?*?@param[in] flags:?標志位參數(shù),包括:MAP_SHARED、MAP_PRIVATE與MAP_ANONYMOUS。
?*?@param[in]?fd:??用來建立映射區(qū)的文件描述符,用?shm_open打開或者open打開的文件
?*?@param[in]?offset:?映射文件相對于文件頭的偏移位置,應(yīng)該按4096字節(jié)對齊
?*
?*?@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ā)送進程給接收進程發(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;
}

編譯、運行:

gcc?send.c?-o?send_process?-lrt
gcc?recv.c?-o?recv_process?-lrt

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

3、socket

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

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

UNIX域套接字基本API接口使用例子:基于UNIX域套接字客戶端進程向服務(wù)端進程發(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;
}

編譯、運行:

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

類socket的其它進程間通信方式:

實用 | nanomsg通信庫的簡單使用分享

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

4、管道

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

(1)匿名管道

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

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

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

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

#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īng)該創(chuàng)建兩個管道。

(2)命名管道

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

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

int?mkfifo(const?char?*pathname,?mode_t?mode);

命名管道基本API接口使用例子:一個進程往管道中寫入測試數(shù)據(jù),另一個進程從管道中讀取數(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;
}

編譯、運行:

gcc?fifo_wr.c?-o?fifo_wr
gcc?fifo_rd.c?-o?fifo_rd

5、信號量

信號量(Seamphore)是進程和線程間同步的一種機制。

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

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

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

POSIX信號量頭文件:

#include?

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

信號量API接口:

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

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

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

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

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

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

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

int?sem_wait(sem_t?*sem);

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

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

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

int?sem_trywait(sem_t?*sem);

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

int?sem_post(sem_t?*sem);

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

int?sem_destroy(sem_t?*sem);

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

int?sem_close(sem_t?*sem);

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

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

信號量基本API接口使用例子:父子進程間通信

#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;
}

編譯、運行:

IPC總結(jié)

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

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

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

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

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

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

相關(guān)資料:

注意

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


end


一口Linux?


關(guān)注,回復(fù)【1024】海量Linux資料贈送

精彩文章合集


文章推薦

?【專輯】ARM
?【專輯】粉絲問答
?專輯linux入門
?專輯計算機網(wǎng)絡(luò)
?專輯Linux驅(qū)動
?【干貨】嵌入式驅(qū)動工程師學(xué)習(xí)路線
?【干貨】Linux嵌入式所有知識點-思維導(dǎo)圖

一口Linux 寫點代碼,寫點人生!
評論
  • 在EMC測試過程中,傳導(dǎo)發(fā)射(Conducted Emission,CE)超標是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標曲線背后,可能對應(yīng)著完全不同的干擾機理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負載、電纜布局或接地結(jié)構(gòu)引起的連鎖反應(yīng)。 · 150kHz~1MHz 超標:多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標:通常共模噪聲占主導(dǎo),干擾通過火線/零線對地回路傳播。 如果條件允許,用電流探
    譽磁電磁兼容EMC 2026-07-31 18:45 399瀏覽
  •     長期專注WiFi領(lǐng)域,也算是行業(yè)老兵了!同行閑聊中,時不時能提起我和我們!從疫情起,國產(chǎn)替代風(fēng)生水起,起起落落,大浪淘沙,生存下來的都是強者!    WiFi模塊應(yīng)用廣泛,對于高端市場和特定市場,要求WIFI模塊需要過CE/FCC之類的認證,也就是說沒有認證的模塊,不具備導(dǎo)入產(chǎn)品設(shè)計.接下來就和大家聊聊認證模塊選型參考!    WIFi模塊硬件方面主要考慮以下九點特性:    1
    納拓科技 2026-07-31 17:56 189瀏覽
  • 今年好幾個客戶都問過我同一件事。藍牙音頻產(chǎn)品到底用 WT2605 這種單芯片,還是老老實實 MCU 外掛藍牙模組。兩種方案我都落地過,說點實在的,WT2605 剛出來那陣我也犯嘀咕,怕是營銷噱頭,真拿來做完一版樣機才服氣。一、選型先看三個維度外圍數(shù)量。這是最直觀的。傳統(tǒng)做法是 MCU 加藍牙模組,再加音頻編解碼、功放、晶振和一堆阻容,板子上密密麻麻十幾二十顆料。WT2605 把藍牙、解碼、功放全收進一顆,外圍就剩少量被動件。開發(fā)周期。傳統(tǒng)方案得自己接藍牙協(xié)議棧,配網(wǎng)、A2DP 解碼、音頻通路一一
    唯創(chuàng)知音語音芯片 2026-07-31 16:35 399瀏覽
  • Synopsys 這次沒有再給行業(yè)看一條只能站在展臺邊圍觀的 demo。7 月 27 日,Synopsys 在 DAC 2026 期間公布兩條 autonomous EDA workflow:一條處理 debug closure,另一條處理 implementation and closure。客戶可以通過 Synopsys 申請在 Microsoft Discovery 上評估,AMD 正在評估這些工作流能否用于下一代產(chǎn)品開發(fā)。公告里最扎眼的是 25%–40%。Synopsys 稱
    麒芯說AI 2026-07-31 14:21 191瀏覽
  • ?摘要:低價大流量卡正全面退市,政策收緊已成定局。面對傳統(tǒng)號卡的不確定性,隨身WiFi憑借穩(wěn)定連接、多設(shè)備共享、獨立設(shè)備和靈活套餐等優(yōu)勢,成為務(wù)實可靠的備選方案。1、流量卡黃金時代要結(jié)束了通信行業(yè)正迎來一場前所未有的“地震式”調(diào)整——曾讓無數(shù)用戶追捧的低價大流量卡,正在全速退出各大平臺。這早已不是一次普通的競合,而是一場趨勢性的行業(yè)洗牌。回望過去,19元200G的神卡,那時真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設(shè)計 2026-08-03 10:21 128708瀏覽
  • 摘要在防爆電氣設(shè)計中,只參照芯數(shù)選型而忽略額定載流量,長期滿負荷運行會出現(xiàn)插頭發(fā)熱、接觸面氧化、IP67 密封受熱老化等問題。結(jié)合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級電流參數(shù)對照表,區(qū)分冷壓免焊接、焊接兩種接線結(jié)構(gòu)的安全載流數(shù)值,設(shè)置合理電流冗余系數(shù),搭配使用環(huán)境修正參數(shù),規(guī)范防爆接近開關(guān)連接器、防爆法蘭插座的選型計算方式。關(guān)鍵詞圓形防爆連接器,載流參數(shù)表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產(chǎn)品概述圓形防爆連接器觸點載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128513瀏覽
  • 光芯片,正在從光模塊的“配角”逆襲為AI產(chǎn)業(yè)鏈的“命門”2026年3月,英偉達一紙公告震動整個光通信行業(yè)——分別向Lumentum和Coherent各投資20億美元,合計40億美元。這哪是什么財務(wù)投資,這是一次對AI基礎(chǔ)設(shè)施關(guān)鍵環(huán)節(jié)的“掐尖式”卡位。光芯片,這個曾經(jīng)被市場當作光模塊BOM表里一個標準配套元器件的東西,正在成為AI產(chǎn)業(yè)鏈上“卡位”最強、話語權(quán)最硬的環(huán)節(jié)。一、為什么是光芯片?老黃早就把話挑明了英偉達CEO黃仁勛的原話是:數(shù)據(jù)傳輸速度已成為人工智能發(fā)展的新瓶頸。AI集群從萬卡級往十萬卡
    用戶1774416745629 2026-07-31 11:22 301瀏覽
  • 摘要防爆自控系統(tǒng)同時布設(shè)本安信號、工業(yè)總線、動力供電三類線路,僅依靠標識標牌管控插接極易出現(xiàn)人為錯插問題,高壓動力回路竄入本安弱電回路會突破安全柵限能標準,產(chǎn)生點火風(fēng)險。依托 A、D、K 標準化機械防呆編碼體系,搭配護套顏色區(qū)分管理,適配 3 針 3 孔免焊接冷壓增安型防爆航插、5PIN 總線防爆航空插頭、8 芯焊接防爆法蘭插座的選型使用,從物理結(jié)構(gòu)層面杜絕防爆接近開關(guān)連接器、防爆傳感器航插接頭混用插接問題,補齊防爆系統(tǒng)被動安全防護體系。關(guān)鍵詞圓形防爆連接器,防呆編碼防爆航插,防爆航空插頭,防爆
    kyfbest科迎法電氣 2026-07-31 18:29 328瀏覽
  • 在芯片總成本中占比不到 1%,卻可能因一處品質(zhì)偏差導(dǎo)致整片晶圓報廢——半導(dǎo)體切割/研磨膠帶,正隨著先進封裝的爆發(fā),成為封測產(chǎn)線選型中最謹慎對待的耗材之一。但鮮有人注意到,決定這層膠帶性能上限的,是上游一層更薄的基膜。這個長期由日本企業(yè)主導(dǎo)的隱形環(huán)節(jié),正在出現(xiàn)國產(chǎn)突圍的信號。一、需求之變:先進封裝與“韜定律”重塑膠帶市場AI 算力芯片、HBM 高帶寬存儲、Chiplet 芯粒等先進封裝產(chǎn)品持續(xù)放量,國內(nèi)封測產(chǎn)線擴產(chǎn)節(jié)奏不減。作為晶圓減薄與切割工序的必需耗材,晶圓膠帶的需求同步擴容。據(jù) QYRese
    芯膜前沿 2026-07-31 16:35 325瀏覽
  • 智能寵物用品這幾年快速普及,自動清理幾乎成了智能貓砂盆的標配。貓咪用完離場,設(shè)備自動翻轉(zhuǎn)清理,養(yǎng)寵家庭省去了每天彎腰清理的麻煩。但自動清理的第一步,是先準確判斷貓到底在不在盆里。這個看似簡單的問題,在小空間里并不容易做好。近場檢測的痛點:距離太遠反而誤事貓砂盆內(nèi)部空間有限。如果傳感器的檢測距離設(shè)得偏大,盆外路過的貓、人甚至物品都會被誤判為貓在盆內(nèi),結(jié)果該清理時不清理、不該清理時亂清理,體驗直接崩壞。這類產(chǎn)品的核心訴求其實就一句話:近距離、小范圍、精準識別,不能有半點誤判。常規(guī)感應(yīng)方案常因檢測距離
    唯創(chuàng)知音語音芯片 2026-07-31 16:51 265瀏覽
我要評論
0
點擊右上角,分享到朋友圈 我知道啦
請使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: XL司令真人版在线观看 | 《在姨母家的客厅》中字易易亲| 铸匠电视剧| 我要爸爸的种子| 年轻人不懂如何谈恋爱第一季观看| 监狱风云之传教士| rosimm电视剧免费观看高清| 遇见你时风好甜| 火影忍者剧场版2012| 姗姗来了| 高清《美人心计》免费观看| 酋长的女儿红辣椒| 辉夜大小姐想让我告白第四季| 死亡笔记电影1| 替丈夫满足我中字HD| 七剑电影| 指尖上传达的热情2| 《社长夫人》天使萌剧免费观看| GAY取精潮喷10次龟责到哭| 大河儿女全集| 同学的妈妈双字ID免费中字| 死亡笔记 最后的名字| 李彩潭在线| 韩国关于美容店的电影有哪些 | 华丽的外出电影韩国版在线观看| 巴掌 红肿WRITE AS| 睫毛膏5美国1983中文 | 女超人-麦乐迪版| 念无双动漫免费观看完整版| 真情无限之继母电视剧| 美姐妹牙医在线电影观看完整版高清| 虹猫蓝兔火凤凰配音| 你们老公晚上怎样玩你| 本乡爱电影免费观看2023年上映 | 拜托小姐主演| 姐妹牙医免费在线观看| 高清《职场妻子的出轨》中语字| 麦乐迪家庭矛盾全集| 电视直播频道| 一念永恒第三季在线免费观看| 大运会运动员踏着蜀锦入场| 井向蓝| 国产真人做爰视频免费| 猫女的诅咒在线观看免费高清版| 演员梶田冬磨猝逝终年22岁| 《善良的小峓子》3| 西游记之大圣归来| 朋友的女人| 瓜达卢佩的玫瑰电影在线伦理片| 偷窥侯爷粗壮冲刺顶弄H视频 | 飞屋环游记高清| 恒大世俱杯录像| 荣誉守则3满天星| 多哈跳水世锦赛2024赛程 | 我爱发明越野车| 我的抗战之猎豹突击高清| 通道| 学校怪谈| 我爱男保姆全集下载| 21世纪爱情指南| 好姑娘8集高清免费播放在线观看| 首付电视剧全集| 三年成全免费完整观看| 还珠格格第1部全集| 人民的名义未删减版有多少集| 0verflower第一季免费观看| 甄嬛传电视剧全集完整版| 财阀家的小儿子在线观看| 白峰电视剧601免费看| 我要打鬼子全集| 渣男退散短剧全集| 电影《生活中的玛丽》免费观看中文 | 买醉什么意思| 大博弈电视剧在线观看| 好姑娘1全集观看免费高清 | 指环王之魔戒再现| 两个妻子剧情介绍| 男女愁愁愁全集共多少集| 张曼玉黎明主演的电影| 电视剧婚变| 《倔强驱魔师》1-4集在线观看免费视 | 莱利里德黑白配在线观看高清| 手机情缘| 百变大咖秀第五季| 插曲免费观看完整版高清| 亲爱的老师6中文版完整版| 甄嬛传54集| 空蝉之森| 尸鬼 动漫| 庆余年手机在线观看| 交换上司的女秘书| 温柔的杀死龙| 印度达人| 死神来了8在线观看完| 台剧恋爱之瘾在线观看| 尖子攻略 电视剧| 哇嘎电影高清在线观看免费网站| 《灰猎犬号》国语版| 真探电影版免费播放完整版| 吸血贵族满天星免费观看完整版| 黑公交轮奸案| 青青河边草HD免费观看电视剧| 台湾版棘手狂情1982的版权声明 | 加勒比女海盗1免费观看高清完整版| 三妻四妾电视剧免费观看| 法国护士长在线免费观看| 黑话律师第四集在线观看| 美女杀羊| 《私人航空》免费在线观看| 恶魔幸存者第二季动漫| 3对1四人一次性体检什么电影| 半夜凌晨三点看的电影| 《美丽妻子替夫还债》有奈美剧吗 | 法国护士长完整版| 消失的爱人| 进击的巨人oad| 柳堡的故事陶玉玲| 宁都采茶戏| 中科院院士:长新冠是基本事实| 电影《需要爸爸播种子》HD中字在线观看,高清完整版美国倫理片_努努影院 | 一起来看流星雨4| 小蜜桃3美丽人生完整版| 看不见的朋友| 牙医姐妹在线观看完整高清免费| 好男人电视剧| 一杆枪勇闯无底洞第三部叫什么| 华尔街1电影| 电影《私人航空》法国| 不是不想嫁剧情介绍| 漂亮的保姆3在线播放西瓜| 高清比熊猫更不擅长恋爱的我们| 变成黑皮辣妹后和朋友做了未删减 | 周生辰晚上折腾时宜| 我有时候也想成为a片主人公| 啄木鸟满天星瓜达卢佩的玫瑰| 咒术尸战电影在线观看| 新包青天之碧血丹心| 920美影| 天亮以后| 书卷一梦电视剧免费观看| 烈火迅雷| 珍珠港高清| 1—5全集免费| 德国空乘4正片| 侏儒人被黑人蹂躏mp4| 法国空乘2016未删减| 灭火宝贝2010美版| 斗罗大陆第206集免费观看| 法国空姐4号| 孤岛猎鹰电视剧全集| 电视剧一生为奴| 看电影电视剧好网站最新电影电视剧 | 韩国大尺度吃奶真做爰| 瓦房店市| 特种兵之火凤凰27集| 七夜雪电视剧在线观看完整版免费| 满清十大刑酷快播| 《金牌销售秘密| 参加北京冬奥会元首| 奔跑吧兄弟20141226| 欧式少女16集全集高清| 卫生间里轮新娘| 意志的胜利| 伦理《法国护士长》在线播放| 免费视频电影免费完整版观看| 《玉茗茶骨》免费播出| 《品味人生》在线观看完整版高清| 蜜桃成熟时3d下载| 怦然心动20岁 第四季| 延庆县| 校花隔壁的流川枫| 甜蜜惩罚全集在线观看| 微雨燕电视剧免费观看| 电影需要爸爸接种子免费观看| 囧的呼唤131| 归晓路晨电视剧免费观看| 荷尔蒙6电影免费观看| 王俊凯跨年2023| 辣妹子的电视剧在线观看| 一家乱战5部| 蔡李佛拳下载| 我们永不言弃免费观看| 战狼6欧式少女全部人物| 高清《他是谁》电视剧| 二十四小时日本中文在线观看| 斗罗大陆第144集免费观看| 日本年经的继拇2| 乔迪-加森| 柯南剧场版18异次元的狙击手 | 美丽人妻在超市被春药| 寻龙传说免费观看完整版中文| 致命罗密欧国语高清| 惊天大贼王国语| 电影《香醇的绣感》演员名单| 黑道老大和我的365天| 仙武帝尊动漫免费观看全集完整版| 万古至尊动漫在线观看免费完整版| 亲爱的柠檬精先生2| 护士给病人做性功能康复治疗| 天外来客bt| .奇怪的美容院2| 美味妹妹| 浪漫满屋泰国版11| 护士的秘密| 电影《误杀3》免费观看| 尼罗河的女儿| 王保长歪传| 秘密搜查官天海翼在线观看| 新金瓶梅中文版真人| 京城李公子是谁| 《禁忌5》高潮| 金战演员表| 夏目彩春的| 4大学生| 假面之夜| 日本电影少女免费观看电影大全| 延安爱情在线观看| 女版战狼14免费观看完整版| 我是刑警第六集| 霍比特人2下载| 家属动漫1~6全集免费| 天下粮仓电视剧全集| 要过好日子下载| 《温柔的谎言》韩世雅| 女教师的诱惑在线观看| 贫嘴张大民| 凹凸影视| 战狼6高清国语免费观看下载电影视频| 苍兰诀在线播放免费观看| 至尊红颜在线观看全集免费| 幸福爱人大结局| 牙医赤子板栗完整版在线观看| 摸金校尉之九幽将军电影免费播放| 花田喜事2010下载| 巨乳女医生的特殊治疗电影| 五号特工组第一部30集电视剧| 动漫在线观看鬼父完整版动漫| 《我的游泳女教练》免费| 我的小姨全集在线观看 | 刻晴大战史莱姆免费观看| 我的表姐| 人口第一大省首现负增长| 《九重紫》在线观看| 安姨高清全集在线观看| 男生操男生动漫| 少女大人第五集免费观看 | 身边的幸福电视剧| 黄凯芹经典歌曲| 庆余年28集| 歼灭天际线的日韩专辑在哪| 宁夏杀人案| 高清《复仇轮回》电影| 《八尺夫人意大利满天星》在线观看| 亲爱的妈妈是5在线观看完整| 差一分的美味电视剧免费播放| 韶山市| 讨厌的部长| 闯荡30集电视剧免费观看| 地震发生前有哪些预兆| 哇嘎在线| 喜爱夜蒲2电影完整播放| 曝江西一河中现碎尸| 寻梦环游记中文版| 三年成全观看免费完整观看| 《妹妹爱上我》动漫| 火烧圆明园免费观看完整版| 仁肉叉烧| 2012在线播放| 甜甜私房猫| 初代奥特曼国语全集| 《法国空8》完整版| 少年阿宾20| 高清《僵尸先生3》免费观看| jizz 日本| 夏家三千金第一部| 女婿回家| johnen 定之爱| 香蕉TV在线观看| 完美世界剧场版在线观看高清| 勾魂恶梦在线| 欧美战狼16免费完整电影在线观看| 迷离时空免费观看| 舍我其谁电视剧免费观看| 伊能静疑似再孕| 白峰美羽无码电影观看| 勇者无惧电视剧全集在线观看| 小王日记毛不易| 帕克经典1982| 燃烧大地| 底线 电视剧| 泰坦尼克号A版啄木鸟| 无极在线观看| 硬核亨利在线观看免费高清| 同龄人在线观看| 嫂子的诱惑| 女虐女胯下变态调教| 子交换1的中文翻译| 腹黑总裁:只对我温柔全集免费| 约会大作战8| 封神传奇电影| 意大利人猿泰山hr| 聊斋花姑子| 飞机上的性服务免费看| 糊涂的爱小品| 黑白黑白配免费免费观看视频| 铠甲勇士之雅塔莱斯大电影完整版| 坏哥哥集百万部电影| 《分娩按摩》3| 电视剧燕赵刑警| 首付电视剧全集| 传奇故事全集| 生死决断秋瓷炫完整版未删减 | 瓜达卢佩的玫瑰免费播放完整版电影| over flow第一季| 主君的太阳13集| 香樟树电视剧| LX司令第一季动漫免费观看| 五郎八卦棍国语| 终极一班5| 李白被贺知章称为什么| 伊波拉病毒无删减版在线观看完整版| 罗马的房子 下载| 玉米靠什么传播种子| 双女任务在线观看| 性肉欲继拇2| 古惑仔2高清| 龙门镖局11| overflower高清在线免费观看| 第11集| 湄公河行动 电影完整版| 金瓶梅在线完整版中文免费观看电影 | 战狼6免费高清版999加拿大版动漫| 美丽回忆| 龙樱第一季电视剧免费观看高清| 恶夜活死鸡| 坎贝奇品味人生电影在线观看| 带帽檐帽子编织教程| 倩女幽魂电影在线观看免费完整版| 安娜德阿玛斯| 韩国金银瓶电影在线观看| 韩剧保姆| 叶玉卿卿本佳人| 爱我几何电影完整版| 牙医姐妹完整版免费 在线观看 | 中文字幕本无吗| 陪讨厌部长出差旅在线观看| 大奉打更人电视剧上映时间| 朱门巧妇| 《高压监狱3》伦理| 金枝缠梦短剧全集完整版| 高清《除却巫山》未删减版邓家佳| 苏明明电影《暗夜》| TOTAKKAHAYAKIRGUZUX_手游大全| 电视剧特战荣耀完整版全集免费观看| 读你原唱| 眼前人心上人短剧免费观看| 《厨房激战2》中文版| 宋小宝小沈阳新小品| 进击的巨人最终章完结篇| 高清猛虎末路| 朴诗妍在电影《爱》中的角色| 胡中华坠子| 满仓进城全集在线观看| 香肠派队下载游戏| 战狼16欧式少女完整剧情| 我想看超级飞侠| 毛阿敏北京演唱会| v酒店第一季在线观看免费版| 《茂盛的森林》电影在线观看| 古惑仔在线观看| 欢乐颂1电视剧全集免费观看| 不当军事行为2017完整版| 苹果 范冰冰版| 李丽珍舒淇徐锦江一起演过的电影| 冰雪尖刀连电视剧免费| 三年成全免费高清观看资源| 女神异闻录在线观看| 木下檀檩子《女婿》在线| 周深 跨年劳模| 电视剧悬崖全集| 97年电影在线免费观看| 《妻子7》在线观看免费版电视剧| 我的妈妈日语| 不健全关系动漫在哪看免费| 女版《壮志凌云》免费| 最新西游记| 绝品邪医的桃花劫短剧免费观看 | 妈妈的职业5观看| 妹妹在线观看| 坐火车旅行电影| 《温泉旅行》在线观看免费| 铿锵锵锵锵锵在线观看完整版| 斯塔姆2| 电影《17.3》完整版| 喜爱夜蒲1在线看| 事物的秘密2浴室吃奶的更新时间| 惊天下:女状元文武短剧全集| 这么多年电影在线观看| 白峰美羽 magnet| 为歌而赞| 侯玉洁2017年讲道视频| 秦腔三娘教子| 中国香港vs朝鲜| 老男孩之猛龙过江西瓜影音| 《印尼空姐》免费观看完整版高清 | 一日女采人电影| 吞噬星空106集| 白峰电影在线播放| 斗罗大陆110集| 大侦探拾光季| 妻子的反击| 需要爸爸播种电影免费观看在线观看 | 美国禁忌结局- 5芭芭拉| 母亲3免费完整高清全集在线观看| 兽兽的黑木耳照片| 爱丽丝喜欢的书籍| 爱我几何150分钟完整电影在线观看完 | 坎贝奇《品味人生无憾》完整版| 哎呀爱呀| 曾志伟最新电影| 白发电视剧| 《妻子6》在线观看免费版电视剧中文| 亲爱的妈妈是5在线观看完整| 热辣滚烫电影免费观看| 糖果盒子| 色九月h| 甄嬛传免费全集观看完整版在线| 孔雀舞曲| 山西警方回应女子当街抢孩子| 孤男寡女免费看电视剧战狼3 | 坎贝尔《无憾》在线观看| 巴哥正传电视剧| 金瓶酶2全集观看| 防火墙5788下载| 性的暴行电影中文字幕| 依然单身免费观看完整版| 钻石夜总会 变脸| 反恐24| 激战丛林在线观看免费完整电影| 阴差阳错换换爱| 商朝电视剧| 小敏家在线电视剧免费观看全集| 锵锵免费完整观看免费| 高处营救在线高清免费观看| 利刃出鞘3电影| 伦敦奥运会男篮决赛录像| 木下檩檩子电影免费观看中| 徐良小凌演唱会| 高清春日狂热未删减| 离婚合同| 浮之手中字6| xl第二季无马赛第八集 | 上瘾的婚姻免费全集在线观看| 公的浮之手中字9字| 谍战剧《破绽》柳云龙在线观看全集 | 四十团圆短剧免费观看| 爸爸的种子电影| 女人花梅艳芳mv| 起飞英文| 特种兵之火凤凰演员| 京香在线播放| 麦乐迪马克斯女超人观看免费观看完整版| 高清《蒙特利尔,我的美人》电影| 名侦探柯南第14个目标| 贾乃亮买醉撒酒疯| 满天星艾丽克莎免费观看| 大戏法电视剧| 慢慢 原唱| 返老还童高清| 爱我几何在线免费观看| 垂涎16集| 鬼灭之刃第三季锻刀村篇免费观看| 晶兵总动员| 肉蔻之香1意大利完整版| 早见晚爱| 高清《家用摄像头》电影| 王牌保镖1在线观看原声| 特殊美容室待遇.7| 锕锵锵锵锵锵锵观看| 终极三国7| 《满江红》在线观看| 性极强的岳让我满足的导演| 新人类之毒医肥尸| 熊出没之伴我熊芯电影免费观看| 兔子先生高清免费看全集| 乖巧的儿媳免费观看电视连续剧| 《乾隆王朝》电视剧| 盟约2023战争片在线观看 | 韩剧天可怜见| 精英律师后妈与继子结局| 咸湿西游记| 99re视频| 一出好戏电影完整版免费观看 | 亡灵召唤| 魔侠传好玩吗| 一夜情人| 扫黑风暴电视剧全集| 羽月希正在播放| 古惑仔4国语| 生化危机5惩罚| 高清手遮天未删减| 满天星女版黑鹰坠落2免费观看| 高清《捉奸侦探》电影| 农家穿越:幸福开局短剧全集| 二十四道拐| 扫毒风暴全集高清完整版免费观看 | 酒店激战2第5集在线播放| 茴香苗的吃法| 越战猎鹿人| 华丽一族电视剧免费全集| 交换秘书在线观看| 天使之谷| 一生一世白鹿在线观看免费完整版| 时间静止器| 所有奥特曼全集| 平西王是谁| 凌云壮志女版满天星MV免费观看 | 错位温情短剧免费观看| 韩国秋瓷炫,生死决断完整版 | 绝代双骄在线观看免费| 刚结婚陪部长出差| 偷偷藏不住在线免费看| 隋唐英雄3电视剧| 分娩按摩4| 完美音调2在线| 国术无双| 弃女重生:邪王追妻全集免费| xl司令全集在线观看完整版免费| 和部长出差电影中字| 古田美穗作品| 野花韩国视频在线观看免费高清| 那年冬天风在吹| 国风按摩院1-5季剧情介绍大全 | 僵尸先生2国语高清| jiZZ日本| 19岁大学生真人观看 | 老妇的欲火| 强风吹拂| 按摩店的待遇1在线观看| 青木花恋| 玉蒲团系列电影| 绝爱电视剧35集免费观看全集播放| 韩剧惊艳免费观看| 日本电影混血精油按摩| 方形人战斗剧场| 盗墓笔记谜海归巢| 洪金宝再谈周星驰| 云南虫谷15 16| 暴躁的少女国语版在线观看| 军事报道历年片尾| 扫黑风暴15集在线观看| 高清《哭悲》台湾恐怖片| 艾曼纽3原版满天星| 麦乐迪女超人完整版下载| 赵奕欢上位电影全集| 爱的奴隶| 《马腾你别走》| 美国电影《需要爸爸播种》电影在线| 联手复仇虐渣:双胞胎姐妹全集免费| 热情的邻居完整版免费| 亲爱的热爱的免费全集观看| 黑丝御姐霸道我| 女超人完整版| 僵尸道长1| 妈妈的星星号| 囧妈电影完整版免费| 四会市| 公的浮中字9| 冷宫逆袭短剧全集| 高清《高嫁柳嫁家》在线看| 活祭之夜| 邻居叫我去修灯泡| 布兰迪洛夫电影《军事不当行为》英| 希德尼娅的骑士| 下半场 微电影| 盲山免费完整电影| 隐身帽| melody makes《女超人》免费播放| 我的小确幸 电视剧| 高清《死侍3》在线观看| 《热情的邻居》动漫续集免费观看| 伦理《法国空乘4观看 | 电视剧真心英雄全集免费观看| 秋瓷炫《生死决断》播放片段 | 不死不灭动画全集免费观看| 心动的信号7全集免费观看| 僵尸家族电影| 播放安斋拉拉的电影叫什么| 厨缘电视剧| 放学后恋爱| 壮士出征全集| 龚玥菲新金甁梅电影| 《酒店》1-100集免费观看在线| 吾妻正斗| 全面追缉令| 韩国电影推油| 任达华温碧霞电影| 《归队》免费观看| 冰河剧场亲爱的老师| 哇嘎电影高清完整视| sss17| 电影《捍战2》| 电视剧大话西游| 豪宅8804万成交| 金银1—9免费版美国| 欲望恋情| 天柱剑毫| 疯狂厨房2双人3-5主题曲| 妻子去朋友公司上班| 三位大学位按摩记在线观看| 天天向上20120525| 唐诗三百首一共有多少首诗| 绝对权力剧情| 大笑喜剧人| 公的浮之手中字主演是谁| 复仇者联盟 人人影视| 芳华解说| 加菲猫电影国语| 我们的新时代电视剧在线观看全集| JIZZ.日本| 新版大头儿子小头爸爸| 同班同学在线电影免费观看完整版 | 精诚的心群英传奇免费观看| 婴儿独自爬出客厅猫咪警觉守护| 部长出差的日子在线看| 新济公活佛下部| 飞驰人生2在线观看 | 女售楼小姐的秘密| 复仇打脸:重生弃少短剧全集| 电视剧陆贞传奇全集| 春来定风波| 白峰正版国语全集下载| 龙神勇士第二部| 清流租房| 善良的小瘦子免费看 | 踏血寻梅电影| 女律师的坠落2理伦片| 你是迟来的欢喜免费观看| 了不起的埃莉诺电影| 昌吉市| 《需要爸爸播种子》演员全名单| 老友记第九季| 疯狂的足球高清| 81号档案| 哈利·波特电影全集免费观看| 美国电影需要爸爸播种子的片段| 新金梅瓶2 国语完整版-视频 | 俺家小院| 《奇怪的夜晚》| 酒店1~50集免费观看| 苍老师小电影全集免费观看高清版| 强制窃贼电视剧| 要过好日子下载| 年轻漂亮的表妹4| 插曲的痛30集全集高清| 成人糗百| 在异世界迷宫开后无修改动漫| 小孩子玩具专卖店| 甄嬛传电视剧免费版全集| 李晨早年上相亲节目| 美国电影《需要爸爸播种2》在线观看| 省港旗兵3国语| 无所畏惧2正版免费播放| 电视剧战争不相信眼泪| 我的自由年代4| 凯登·克劳丝-Kayden壮志凌云| 官方通报县领导出轨女干部| 拔掉57颗牙是什么体验| 致命弯道5完整版在线观看视频| 哥哥的老婆韩国电影| xl司令全集在线观看完整版高清| 第一滴血女版满天星电影在线观看 | 24世纪性格爱情指南日韩 | 地狱奶奶| 以家人之名电视剧全集免费| 和讨厌的部长去出差旅| 男女愁愁愁高清全集| 还珠格格第1部全集| 永乐大帝电视剧全集免费观看 | 偏偏喜欢你电视剧免费观看| 捏橘子游戏| 电影《需要爸爸播种子》完整版在线观看视 | 星球大战4新希望| 品味人生在线观看免费高清电视剧坎| 死神来了6完整版高清免费看| 财阀刑警| 朱迅的葬礼现场照片| 胡汉三小品| 爸爸在这儿| 开心超人联盟之奇幻谜瑞岛2021 | 关晓彤鹿晗合唱过哪首歌| 刀客家族的女人 电视剧| 叔母的爱电影免费观看完整版| 蛇姬恋》 | 酒店1-80集全集免费| 蜡笔小新剧场版森巴入侵计划| 饥饿游戏2:星火燎原| 最后一班地铁完整版在线观看| 食人鱼事件剧情介绍| 神机妙算刘伯温第七单元| 电视剧我的如意狼君| 萨迪1980满天星免费播放| 插曲的痛60集全免费观看| 慈禧秘史邱淑贞| 天地粮人电视剧| 《无能丈夫》日剧高清版| 合作市| 台版1987渔夫荒野史免费观看| 养母的花样年华演员表| 要过好日子下载| 扫毒3电影在线观看免费完整版| 《圣特罗佩斯的姑娘们》在线观看 | 故宫开车| 开心小和尚电视剧全集免费观看| 瓜达卢佩的玫瑰电影| 俄罗斯黑白配| 高清《前任1》高清完整版| 神隐40集电视剧在线观看免费| 超级飞侠动画片| 胶囊旅馆未删减版樱花| 美国伦理《生殖按摩》在线| 《我们的爱》泰剧免费播放全集| 糊涂的爱小品| 精英律师全集| 秘密女搜查官在线观看前田| 狄仁杰之骷髅将军| 虎胆龙威5高清国语| 吸血贵族满天星免费观看完整版| 魔术师与巨人| 父母爱情在线观看全集完整版电视剧| 灵与肉电视剧剧情介绍| 与讨厌的部长一起去出差旅在线免费观看 | 意大利爸爸的种子免费观看电视剧中| 美容院的待遇8免费观看| 街头霸王电影| 《笼中鸟》完整版| 马与人电影在线观看免费播放| 姐姐的朋友在线观看免费完中文整版 | 电影战马| 女教师引诱12| 私人家教1983版电影免费观看| 牛鞭擦进女人下身手机在线观看 | 解语花电影完整版在线| 赵丽颖背后的故事| 杰西简《壮志凌云》| 两个母亲id两个妈妈| 《依然闪亮》| 电影《度娘》免费观看| 大奉打更人电视剧免费高清版| 聚会的目的1在观完整有限中字| 女超人麦乐迪版| 三年全成全在线播放免费观看| 雪中悍刀行电视剧| 峡谷在线观看高清完整| 老头同性老老头交tv| 霍元甲电视连续剧| 安斋拉拉出演电影免费版| 女超人满天星版麦乐迪在线观看完整| 福禄寿放暑假粤语| 君扬兄茶杯头| 电影 搜索| 法版风女管家2008版电影| 《军事行为》布兰迪洛夫观看| 《女超人麦乐迪满天星版》| 王楚钦退出WTT仁川冠军赛| 女学生的滋味HD| 《仙剑奇侠传三》电视剧| 勾魂噩梦观看| 公之浮手在线观看完整版| 妻子日本电影| 汉武大帝高清| 水鬼电影| 内衣公司动漫第4集| 紫钗奇缘高清国语版| 《妈妈爱上儿子同学》电影完整版| 玉女心经3之阴阳结合免费观看电视剧| 不是问题的问题| 神探飞机头国语| 小伙子爱上隔壁女邻居电视剧| 苍兰诀观看完整版全集| 电影《需要播种》在线看| 私人航空1法国满天星免费播放| 佳期如梦电视剧结局| 星汉灿烂电视剧免费观看| 樱桃魔法| 挡不住的风情 下载| 崇明县| 《吴健农民伯伯下乡》播放| 粤曲大全| 孟鹤堂结两次婚| 交换游戏2中国话| 下一站天后动漫全集| 请回答1988 电视剧| 麻生香《黑色的眼泪》在线观看| 义姐是不是良在哪里看| 琉璃美人煞免费观看全集电视剧| 电影强我| 女友的妈妈在线| 电视剧钟点工们| 电影《生活中的玛丽》免费播放 | 新有菜电影| 女儿国3在线观看免费版,电影色戒完整版| 虎胆威龙5| 东北奇缘在线观看完整版| 那金花的女婿| 刺杀盖世太保| 破密电视剧40集免费观看全集| 《法国航空4》| 《女超人》满天星| 继承者们 电视剧| 疯狂动物城(国语版)普通话| 第十九层电视剧| 夫妇联欢会回不去的夜晚9集| 三年大片高清电影免费观看| 第一次4中国国语| 一个妈妈的女儿第二集| 小寡妇哭坟| 清华长庚医院付猛医生| 窃听风云2电影| 美国队长1免费高清完整版观看 | 高清《暗夜情报员 第三季》电视剧| 真爷们儿电视剧全集| 狂拽酷霸叼炸天| 三姐妹瑜伽健身原版| 美国1-5普通话免费观看完整版| 妖精视频在线免费观看| 深圳相亲角| 蔡卓妍删减42分钟电影上映| 电视剧王牌部队| 放羊的星星全集优酷| 人猿泰山1995版意大利经典电影| 插曲的痛30全集免费观看高清版!| 冤家亲家电视剧全集在线观看| 延禧攻略69集| 今生今世 电视剧| 英剧《救赎/penance》| 三年大片大全免费观看国语版2 | 扫黑风暴25集| 杏林春暖 下载| 好迪代言人李玟| 学会夹有多重要| 兄弟的老婆8免费观看电视剧下载hezewan| 康师傅老坛酸菜牛肉面广告| 幻影忍者动画片| 长津湖手机免费高清| 法国空姐4(多塞尔航空)完整版免费中文| 猩球崛起1| 尸病污染| 日本年轻母年经4| 古蔺县| 私人助理2法国版电影免费看|