1. 程式人生 > >unix域socket繫結路徑不建立檔案問題[c語言]

unix域socket繫結路徑不建立檔案問題[c語言]

unix域socket繫結地址時,需要指定一個檔案路徑,存在兩種情況:

(1)socket自動建立一個bind指定的檔案路徑對應的檔案

 (2)不需要建立socket檔案,只需要命名一個全域性名字即可讓客戶端根據此名字進行連線。後者的實現過程與前者的差別是,後者在對地址結構成員sun_path陣列賦值的時候,必須把第一個位元組置0,即sun_path[0] = 0,

下面用程式碼說明:

第一種、建立檔案路徑

地址結構設定:

    //name the server socket   
    server_addr.sun_family = AF_UNIX;  
    strcpy(server_addr.sun_path,"/tmp/test1");  
    server_len = sizeof(struct sockaddr_un);  
    client_len = server_len;  
第二種.不建立檔案

地址結構設定

    //name the server socket   
    server_addr.sun_family = AF_UNIX;
    server_addr.sun_path[0] = '0'
    strcpy(server_addr.sun_path + 1,"/tmp/test2");
server_len = strlen(SERVER_NAME)  + offsetof(sockaddr_un, sun_path); 



1.採用上面兩種地址結構設定建立了2個UNIX域socket繫結路徑分別為:

/tmp/test1

/tmp/test2


2.在linux下去這2個路徑找對應的檔案,發現前1個並不存在,只有最後一個路徑對應檔案存在,

通過netstat檢視socket狀態,可以發現前三個socket對應的Path 前面有@標記

(1)存在@標記 並不會建立檔案

 (2)不存在@標記 會建立檔案

[[email protected]]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 192.168.150.151:ssh         192.168.150.254:35087       ESTABLISHED
tcp        0      0 192.168.150.151:ssh         192.168.150.254:31958       ESTABLISHED
tcp        0      0 192.168.150.151:ssh         192.168.150.254:32175       ESTABLISHED
tcp        0      0 192.168.150.151:ssh         192.168.150.254:35016       ESTABLISHED
tcp        0      0 192.168.150.151:ssh         192.168.150.254:35032       ESTABLISHED
tcp        0      0 192.168.150.151:ssh         192.168.150.254:35020       ESTABLISHED
tcp        0      0 192.168.150.151:ssh         192.168.150.254:32023       ESTABLISHED
tcp        0      0 192.168.150.151:ssh         192.168.150.254:35177       ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         DGRAM                    33744496 /tmp/test1
unix  2      [ ]         DGRAM                    33744711 @
/tmp/test2

注意:

以上為c語言,如果是python 好像是無條件建立檔案的

相關推薦

unixsocket路徑建立檔案問題[c語言]

unix域socket繫結地址時,需要指定一個檔案路徑,存在兩種情況: (1)socket自動建立一個bind指定的檔案路徑對應的檔案  (2)不需要建立socket檔案,只需要命名一個全域性名字即可讓客戶端根據此名字進行連線。後者的實現過程與前者的差別是,後者在對地址結構

Vue某些情況下 v-model資料實時更新解決辦法

有的時候我們變化data內的內容,console.log列印的時候是顯示已經變化了的,但並沒有渲染到介面上去。受 ES5 的限制,Vue.js 不能檢測到物件屬性的新增或刪除。因為 Vue.js 在初始化例項時將屬性轉為 getter/setter,所以屬性必須

Java 在給定路徑建立檔案,所在資料夾存在時,如何正確建立

String strPath = "E:\\a\\aa\\aaa.txt"; File file = new File(strPath); if(!file.exists())){ file.createNewFile(); } 這段程式碼,如果 E:\a\aa\ 資料夾

【Vue中的坑】vue專案中動態src顯示圖片解決方法

  v-for繫結src的資料如下: data() { return { img_src:"../../assets/images/mirror-service.png" } }   渲染之後,發現圖片不顯示,上網查詢之後發現是應為

socketINADDR_ANY

其中INADDR_ANY就是指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址,或“所有地址”、“任意地址”。 一 般情況下,如果你要建立網路伺服器,則你要通知伺服器作業系統:請在某地址 xxx.xxx.xxx.xxx上的某埠 yyyy上進行偵聽,並且把偵聽到的資料包傳送給我。這

easyUI 導航欄動態生成時事件相應

            一個困擾兩天的問題。demo取的是easyUI官網上的例子。            最近在接觸easyUI輕量級框架的時候,看到一個模板款式蠻好看的。          一個標準的 分為North ,south,west以及center 在生成導

UNIXSocket名稱空間

socket程序通訊命名方式有兩種:1、普通名稱空間  2、抽象名稱空間 1、普通名稱空間: socket會根據此命名建立一個同名的socket檔案,客戶端連線的時候讀取該socket檔案連結到soc

vue專案input輸入框雙向資料實事生效

<input type="text" maxlength="11" placeholder="請輸入聯絡人電話" v-model="form.phone" />//這樣的輸入框,繫結的是data中的form物件上的phone欄位。在mounted鉤子函式裡邊寫:t

socket的ip為INADDR_ANY 的意義

socket INADDR_ANY 監聽0.0.0.0地址 socket只繫結埠讓路由表決定傳到哪個ip 其中INADDR_ANY就是指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址,或“所有地址”、“任意地址”。 如果指定ip地址為通配地址(INADDR_

給動態動態生成元素事件生效解決方法

JQ動態生成的元素,無法繫結事件,查詢到的原因是:繫結事件的元素必須是構造頁面時已經存在的,假如構造元素是不存在,是後動態生成,則繫結不了,解決方法,通過on()繫結舉例:$("body").on("c

socketINADDR_ANY,那會怎樣?(例如:雙通機房多網絡卡多IP設定)

我也回覆一個!! 其中INADDR_ANY就是指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址,或“所有地址”、“任意地址”。 一般情況下,如果你要建立網路伺服器,則你要通知伺服器作業系統:請在某地址 xxx.xxx.xxx.xxx上的某埠 yyyy上進行偵聽

如何在本地伺服器域名及host檔案的使用說明

在本地伺服器繫結域名: 開啟C:\WINDOWS\system32\drivers\etc\ 目錄下面的hosts檔案,把127.0.0.1 localhost複製,貼上到檔案的最後,然後把localhost改為自己想要繫結的域名,比如127.0.0.1 www.caizhichao.cn,這樣

【unity3d】通過沙盒路徑建立檔案,讀取檔案

注意的是string _path = Application.persistentDataPath + “/xxx”; xxx如果要寫xml檔案,則可不帶字尾,如果讀寫txt檔案,則需要加入xxx.txt字尾名。 注意讀寫順序,大致為 :獲取路徑,建立路徑夾,建立檔案,讀取檔案 Application.pe

如何使用cocos的自動工具實現lua呼叫c++的類

如何使用cocos的自動繫結工具實現lua呼叫c++的類 主要分成以下步驟 1、建立自己的c++類檔案 2、然後修改和執行引擎資料夾cocos2d-x-3.7\tools\tolua 目錄下的genbindings.py 檔案, 3、編寫自己的ini檔案 4、將生成的繫

動態生成控制元件-事件(VB.NET/C#)

動態生成控制元件後繫結事件的語句: C#:TextBox tbb=new TextBox();tbb.ID="tb";tbb.Width=80;tbb.AutoPostBack=true;tbb.Tex

JAVA獲取資源路徑建立檔案物件

一、Java專案中建立檔案物件 下面是一個java專案,名稱為ResourceTest。在這個專案中有4個檔案,1.properties、2.properties、3.properties、4.properties。 編譯完成後,這4個檔案的路徑如下:

Windows環境使用MinGW建立簡易C語言開發環境

命名 小型 c語言開發 簡易 系統設置 close ini 你會 tdi MinGW,是Minimalist GNUfor Windows的縮寫。我們用MinGW來搭建一個簡單的C語言開發環境。 一、安裝MinGW 首先去官網下載MinGW的安裝包:http://www.m

數據結構8: 雙向鏈表(雙向循環鏈表)的建立C語言實現

clas truct 開始 麻煩 使用 解釋 display 表頭 後繼 之前接觸到的鏈表都只有一個指針,指向直接後繼,整個鏈表只能單方向從表頭訪問到表尾,這種結構的鏈表統稱為 “單向鏈表”或“單鏈表”。 如果算法中需要頻繁

演算法導論 之 B樹 B-樹 - 建立 插入 C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

檔案C:\Program Files\ubuntu\ubuntu\Ubuntu 64 位.vmdk”: 許可權不足,無法訪問檔案

使用管理員許可權開啟虛擬機器,一般都可以解決。 補充: 1、無法連線   解決方法:以管理員身份執行此軟體。     2、使用vmware提示:無法開啟核心裝置 \\.\Global\vmx86: 系統找不到指定的檔案