2014-03-19 128 views
3

我可以將打開的調用返回的文件描述符綁定到套接字嗎?文件描述符和套接字文件描述符之間的區別

我試圖做這樣的事情,

filefd = open("path",O_RDWR); 

... 

bind (filefd, (struct sockaddr *) &servaddr, sizeof(servaddr)); 
connfd = accept (filefd, (struct sockaddr *) &cliaddr, &clilen); 

爲什麼會接受調用返回-1?

回答

3

從應用程序的角度來看,區別在於您如何創建和使用描述符。一些系統調用可以採用任何類型的描述符,而另一些則需要特定類型的描述符。

在您的情況下,如果您檢查了錯誤,則bind調用也會返回-1。當系統調用返回-1時,您應該檢查errno以查看出了什麼問題。您可以使用strerror獲取可打印的錯誤字符串,或者使用perror直接打印。

+0

文件和套接字可以共享相同的fd嗎? –

+0

@SagarPatni號你實際上可以將描述符想成索引到一個數組中,如果你有兩個不同的索引,它們將「指向」數組中的不同位置。 –

+0

我想要做的是,提供一個套接字字符設備,因爲系統調用的開銷太大,所以不知何故我試圖映射這兩個文件 –