2014-01-21 3 views
-2

이것은 어리석은 질문처럼 보일지 모르지만 나는 집에서하는 것이 더 낫다. 프로젝트 작업 중이 야. 이 코드를 작성했지만 출력을 이해하지 못했습니다. 누군가가 [의견에서 업데이트 :]socket() 출력 이해하기

int MasterSocket[3]; 
int i = 0; 
for(i=0; i<3; i++) 
{ 
    MasterSocket[i] = socket(AF_INET , SOCK_STREAM , 0); 
} 

for(i=0; i<3; i++) 
{ 
    printf("\n%d---\n", MasterSocket[i]); 
} 

OUTPUT -

[email protected]:~/Ubuntu One/workspace/multiConnectionSockets/Debug$ ./multiConnectionSockets 

3--- 

4--- 

5--- 

을들이 설명시겠습니까

왜 기술자 출력은 3에서 시작했을까요? 0, 1 및 2는 미리 정의된다.

+0

사실, 기억하기 위해 * 설명서를 읽어야했습니다.'man socket' : 성공하면 새로운 소켓의 파일 기술자가 반환됩니다. 에러시 -1이 반환되고 errno가 적절하게 설정됩니다. –

+0

하지만 설명자 출력이 3에서 시작해야하는 이유는 무엇입니까? '0, 1 및 2 '는 미리 정의되어 있습니다. –

+2

예. 'stdin','stdout', stderr' –

답변

2

당신은 무엇을 이 코드가이 할 것으로 예상합니까? 당신이 socket() 기능에 대한 설명서를 읽는다면, 그것은 말한다 :

SYNOPSIS 
     #include <sys/types.h>   /* See NOTES */ 
     #include <sys/socket.h> 

     int socket(int domain, int type, int protocol); 
RETURN VALUE 
     On success, a file descriptor for the new socket is returned. On 
     error, -1 is returned, and errno is set appropriately. 

int에서 socket() 수익률과는 "파일 기술자"로 설명 있음을 알려줍니다 - 단순히 운영 체제를 참조하기 위해 사용하는 무언가이다 열린 파일 또는 파일과 같은 자원. 그래서 당신은 실행하면

s = socket() 

당신은 write() 또는 read() 시스템 호출 같은 것들을 사용할 때, 열린 네트워크 연결을 의미 몇 가지 정수 값으로 s을 설정합니다. 소켓의 종류와 사용법을 이해하려면 "소켓 프로그래밍 예제"를 검색하면 찾을 수있는 많은 결과 중 하나를 읽어야합니다.

1

socket() 시스템 호출은 파일 설명자를 반환합니다. UNIX 시스템에서는 정수입니다. 내가 이해하지 못하는 것은 "3"파일 디스크립터를 두 번 얻는 방법이다. 다음 코드는 컴파일하고 중복 된 파일 설명자를 가져 오지 않습니다.

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/socket.h> 

void main() { 
    int MasterSocket[3]; 
    int i = 0; 
    for(i=0; i<4; i++) 
    { 
    MasterSocket[i] = socket(AF_INET , SOCK_STREAM , 0); 
    } 

    for(i=0; i<4; i++) 
    { 
    printf("\n%d---\n", MasterSocket[i]); 
    } 
} 

작업을 더 잘 검사하십시오.