recv() 함수

OS/Linux 2015. 12. 13. 15:14

설명

recv() 함수는 소켓으로부터 데이터를 수신합니다.

헤더#include <sys/types.h> 
#include
 <sys/socket.h> 
형태int recv(int s, void *buf, size_t len, int flags); 
인수
int s: 소켓 디스크립터 
void *buf: 수신할 버퍼 포인터 데이터
size_t len: 버퍼의 바이트 단위 크기
int flags: 아래와 같은 옵션을 사용할 수 있습니다.
flags옵션 설명
MSG_DONTWAIT수신을 위해 대기가 필요하다면 기다리지 않고 -1을 반환하면서 바로 복귀
MSG_NOSIGNAL상대방과 연결이 끊겼을 때, SIGPIPE 시그널을 받지 않도록 합니다.
반환
-1 이외: 실제 수신한 바이트 수
-1: 실패

출처: http://forum.falinux.com/zbxe/index.php?document_srl=441107&mid=C_LIB

'OS > Linux' 카테고리의 다른 글

기본 파일 디스크럽터  (0) 2015.12.13
리눅스 시스템 콜 명령어  (0) 2015.12.13
Select 함수  (0) 2015.12.13
PF_INET 과 AF_INET  (0) 2015.12.13
FD_ZERO, FD_SET, FD_ISSET 등  (0) 2015.12.11
Posted by 知彼知己百戰不殆
,

Select 함수

OS/Linux 2015. 12. 13. 14:58

int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

nfds : 관리하는 파일의 개수 등록, 파일의 개수는 최대 파일 지정 번호 +1

fd_set : 관리하는 파일의 지정번호가 등록되어 있는 비트 배열 구조체

    readfds : 읽을 데이터가 있는 지 검사하기 위한 파일 목록

    writefds : 쓰여진 데이터가 있는 지 검사하기 위한 파일 목록

    exceptfds : 파일에 예외 사항들이 있는 지 검사하기 위한 파일 목록

timeout : select 함수는 fd_set에 등록된 파일들에 데이터 변경이 있는 지를 timeout동안 기다린다. 만약 timeout시간 동안 변경이 없다면 0을 반환. ex) 파일 지정 번호가 3이라면 4번째 비트 배열에 대응된다.

변경된 데이터가 있다면 해당 비트값이 1로 설정이 되고, 프로그램은 이 비트 값을 검사함으로써 어떤 파일 지정 번호에 변경된 데이터가 있는 지 확인해서 읽기/쓰기를 하면 된다.


select 함수는 데이터가 변경된 파일의 개수, 즉 fd_set에서 비트 값이 1인 필드의 개수를 반환한다. 데이터가 변경된 파일의 목록을 반환하지 않는다는 것에 주목해야 한다. 만약 최대 파일 지정 번호가 1000이고 select가 1을 반환 했다면, 0번 부터 루프를 순환하면서 어떤 파일이 변경되었는지를 검사해야 한다.


'OS > Linux' 카테고리의 다른 글

리눅스 시스템 콜 명령어  (0) 2015.12.13
recv() 함수  (0) 2015.12.13
PF_INET 과 AF_INET  (0) 2015.12.13
FD_ZERO, FD_SET, FD_ISSET 등  (0) 2015.12.11
bzero함수  (0) 2015.12.10
Posted by 知彼知己百戰不殆
,

PF_INET 과 AF_INET

OS/Linux 2015. 12. 13. 12:24

소켓 생성 시 사용되는 인자 도메인은 PF_INET과 AF_INET

(참고: 소켓은 네트워크 통신을 할 때만 사용되는 것이 아니라 유닉스 계열의 시스템에서 시스템 내부의 프로세스들끼리 통신을 하기 위해서도 사용됨)

PF_INET : 프로토콜 체계(프로토콜 패밀리)중 하나



AF_INET : 주소체게(주소 패밀리)중 하나



프로토콜 체계를 설정하는 부분: PF로 시작하는 상수 사용

주소 체계를 설정하는 부분: AF로 시작하는 상수 사용

'OS > Linux' 카테고리의 다른 글

리눅스 시스템 콜 명령어  (0) 2015.12.13
recv() 함수  (0) 2015.12.13
Select 함수  (0) 2015.12.13
FD_ZERO, FD_SET, FD_ISSET 등  (0) 2015.12.11
bzero함수  (0) 2015.12.10
Posted by 知彼知己百戰不殆
,

FD_ZERO(fd_set*fdset) : *fdset의 모든 비트를 지운다.

사용법) FD_ZERO(&rset);

 

FD_SET(int fd, fd_set *fdset) : *fdset중 소켓 fd에 해당하는 비트를 1로 한다.

사용법) FD_SET(s1, &rset);

 

FD_ISSET(int fd, fd_set *fdset) : *fdset중 소켓 fd에 해당하는 비트가 세트되어 있으면 양수값인 fd를 리턴한다.


FD_CLR(int fd, fd_set *fds) : *fdset 중 소켓 fd에 해당하는 비트를 0으로 한다.

'OS > Linux' 카테고리의 다른 글

리눅스 시스템 콜 명령어  (0) 2015.12.13
recv() 함수  (0) 2015.12.13
Select 함수  (0) 2015.12.13
PF_INET 과 AF_INET  (0) 2015.12.13
bzero함수  (0) 2015.12.10
Posted by 知彼知己百戰不殆
,

size_t형과 unsigned int

언어/C 2015. 12. 11. 11:54

size_t : unsigned int, 문자열이나 메모리의 사이즈를 나타낼 때 사용

unsigned int를 typedef unsigned int size_t;  (size_t 라는 이름으로 정의해 놓은 것)

size_t는 32비트 운영체제에서 '부호없는 32비트 정수', 64비트 운영체제에서는 '부호없는 64비트 정수'

unsigned int 또는 int는 64비트 OS라고 해서 항상 64비트 정수는 아니다. 여전히 32비트 일 수도 있음.

이것이 size_t형과 unsigned int형의 차이

Posted by 知彼知己百戰不殆
,

bzero함수

OS/Linux 2015. 12. 10. 21:56

1. 사용법

#include <string.h>

void bzero(void *s, size_t n);

2. 설명

바이트 스트링 s 의 처음 n 바이트를 0으로 채운다. memset(3)과 마찬가지로 메모리를 초기화하기 위한 목적으로 주로 사용된다. 그러나 이함수는 구식이 되었다. bzero 대신 memset(3) 을 사용하도록 하자.

3. 예제

#include <string.h>

struct mydata
{
    int a;
    char b[255];
};
int main()
{
    char buf[255];
    struct mydata data;

    bzero(buf, 255);
    bzero((void *)&data, sizeof(data));
}

'OS > Linux' 카테고리의 다른 글

리눅스 시스템 콜 명령어  (0) 2015.12.13
recv() 함수  (0) 2015.12.13
Select 함수  (0) 2015.12.13
PF_INET 과 AF_INET  (0) 2015.12.13
FD_ZERO, FD_SET, FD_ISSET 등  (0) 2015.12.11
Posted by 知彼知己百戰不殆
,

문제:

32비트 정수에 대한 간단한 부울 계산기로 동작하는 프로그램을 작성하시오. 이 프로그램은 사용자에게 다음 리스트에서 선택하도록 요청하는 메뉴를 표시해야 한다.

1. x AND y

2. x OR y

3. NOT x

4. x XOR y

5. Exit program

사용자가 선택하면 수행할 연산의 이름을 표시하는 프로시저를 호출한다. (우리는 다음 연습문제에서 이 연산들을 구현할 것이다.)

 

INCLUDE Irvine32.inc

.data
menu  BYTE "1. x AND y",0dh,0ah
   BYTE "2. x OR y",0dh,0ah
   BYTE "3. NOT x",0dh,0ah
   BYTE "4. x XOR y",0dh,0ah
   BYTE "5. Exit Program",0

menu1 BYTE "x AND y",0
menu2 BYTE "x OR y",0
menu3 BYTE "NOT x",0
menu4 BYTE "x XOR y",0
menu5 BYTE "Exit Program",0
str1 BYTE "Select the menu: "
int1 DWORD ?
int2 DWORD ?

.code
main PROC
START:
 mov  edx,OFFSET menu
 call WriteString
 call Crlf
 call Crlf
 mov  edx, 0
 mov  edx,OFFSET str1
 call WriteString
 call ReadInt

 cmp  eax, 1
 je  STATE1
 cmp  eax, 2
 je  STATE2
 cmp  eax, 3
 je  STATE3
 cmp  eax, 4
 je  STATE4
 cmp  eax, 5
 je  QUIT

STATE1:
 call AND_op
 jmp START
STATE2:
 call OR_op
 jmp START
STATE3:
 call NOT_op
 jmp START
STATE4:
 call XOR_op
 jmp START
QUIT:
 mov  edx,OFFSET menu5
 call WriteString
 call Crlf
 exit
main ENDP

AND_op PROC
 mov  edx,OFFSET menu1
 call WriteString
 call Crlf
 ret
AND_op ENDP

OR_op PROC
 mov  edx,OFFSET menu2
 call WriteString
 call Crlf
 ret
OR_op ENDP

NOT_op PROC
 mov  edx,OFFSET menu3
 call WriteString
 call Crlf
 ret
NOT_op ENDP

XOR_op PROC
 mov  edx,OFFSET menu4
 call WriteString
 call Crlf
 ret
XOR_op ENDP

END main

 

 

 

'언어 > Assembly' 카테고리의 다른 글

명령어  (0) 2015.12.16
0dh,0ah  (0) 2015.12.16
어셈블리 과제: 점수 입력 받아서 점수에 해당하는 등급 출력하는 코드  (0) 2015.12.05
Posted by 知彼知己百戰不殆
,

INCLUDE Irvine32.inc

.data
str1 BYTE "Input the exam grade: ",0
str2 BYTE "Grade: ",0
str3 BYTE 'A','B','C','D','F'

.code
main PROC
Grade:
 mov  edx, OFFSET str1
 call WriteString
 call ReadInt
 
 mov  ebx,41h
 cmp  eax,90
 jge  L1
 inc  ebx

 cmp  eax,80
 jge  L1
 inc  ebx

 cmp  eax,70
 jge  L1
 inc  ebx

 cmp  eax,60
 jge  L1
 
 mov  ebx,46h
 jmp  L1

L1:
 mov  edx,OFFSET str2
 call WriteString
 mov  eax,ebx
 call WriteChar
 call Crlf
 jmp  Grade

main ENDP
END main

 

90~100 : A등급

80~89 : B등급

70~79 : C등급

60~69 : D등급

0~59 : F등급

'언어 > Assembly' 카테고리의 다른 글

명령어  (0) 2015.12.16
0dh,0ah  (0) 2015.12.16
어셈블리 과제: 32비트 정수 부울 계산기  (0) 2015.12.05
Posted by 知彼知己百戰不殆
,