unix Socket程序間通訊

2021-10-17 08:50:37 字數 2266 閱讀 4362

結構體部分介紹

typs.h

# define __std_type typedef

#define __u32_type unsigned int

__std_type __u32_type __socklen_t;

unistd.h

typedef __socklen_t socklen_t;

linux/un.h

#define unix_path_max 108

struct sockaddr_un

示例:

client 部分的**

#include

#include

#include

#include

#include

#include

#include

#include

intmain

(int argc,

char

*ar**)

memset

(&serveraddr,

0x00

,sizeof

(struct sockaddr_un));

serveraddr.sun_family = af_unix;

memcpy

(serveraddr.sun_path, ar**[1]

,strlen

(ar**[1]

));printf

("path: %s\n"

, ar**[1]

);unlink

(ar**[1]

);if(

connect

(clientfd,

(struct sockaddr *

)&serveraddr,

sizeof

(struct sockaddr_un))==

-1)while(1

)printf

("exit\n");

close

(clientfd)

;return0;

}

server部分的**

#include

#include

#include

#include

#include

#include

#include

#include

intmain

(int argc,

char

*ar**)

memset

(&serveraddr,

0x00

,sizeof

(struct sockaddr_un));

serveraddr.sun_family = af_unix;

memcpy

(serveraddr.sun_path, ar**[1]

,strlen

(ar**[1]

));unlink

(ar**[1]

);if(

bind

(serverfd,

(struct sockaddr *

)&serveraddr,

sizeof

(struct sockaddr_un))==

-1)if

(listen

(serverfd,

1024)==

-1)printf

("enter accept\n");

int len =

sizeof

(struct sockaddr_un)

;while(1

)printf

("clientfd = %d, sun_path = %s\n"

, clientfd, clientaddr.sun_path)

;while(1

)sleep(2

);close

(serverfd)

;break;}

printf

("exit\n");

return0;

}

注:

1)服務端accept時的長度要轉為socklen_t ,

否則在會出現accept failed,14, bad address

2)在bind之前要確定檔案不存在,即要執行unlink操作

3)執行命令 :./a.out ./hello.txt

php程序間通訊 yoc PHP程序間通訊

php是用c編寫的,因此它對系統底層api的操作與c很像,同大多數語言一樣,php程序間通訊的方式有以下幾種 訊息佇列,管道,共享記憶體,socket和訊號。本文是對這幾種通訊方式對整理 管道通訊pipe 管道用於承載簡稱之間的通訊資料。為了方便理解,可以將管道比作檔案,程序a將資料寫到管道p中,然...

程序間通訊

實現程序間資料共享除了常用的記憶體檔案對映外,對於一些非檔案的資料共享可以直接使用wm copydata。如果需要在程序a傳遞資料到程序b,簡單的實現如下 在程序a中 cstring strdatatosend t hello 需要傳遞的資料 hwnd hwndreceived 程序b的接收資料視窗...

程序間通訊

最近做專案遇到奇怪的問題,我在主線程中建立乙個工作執行緒。在工作執行緒中用sendmessage向主線程傳送訊息,通知主線程操作office 物件。getactiveobject時提示 hr 0x8001010d 因為應用程式正在傳送乙個輸入同步呼叫,所以無法執行傳出的呼叫。我把sendmessag...