728x90
반응형
※ 소켓 함수 중요함
시스템 프로그래밍, 소켓 프로그래밍 에러처리
1.main_에러처리관련 코드들
#include <stdio.h>
#include <winsock2.h>
//typedef int* LPINT;
//typedef const int* LPCINT;
//LP long pointer
//exam
//typedef int INT;
//typedef char CHAR;
// typedef char * LPSTR;
//typedef const char* LPCSTR;
// typedef void* LPVOID;
//void ,void *
//[str]...problem
//[WSAStartup]...problem
//LP는 *(포인터)이 붙음
void ErrorExit(const char* str); //program exit
void ErrorMsg(const char* str); //monitor output
void OKMsg(const char* str);
#include "MySocketError.h"
#pragma comment(lib, "ws2_32,lib")
int main(void)
{
WSADATA wData = { 0 };
int result = -1;
result = WSAStartup(MAKEWORD(2, 2), &wData);
if (!result) OKMsg("WSAStartup");
else ErrorExit("WSAStartup");
result = WSACleanup();
if (!result) OKMsg("WSACleanup");
else ErrorExit("WSACleanup");
return 0;
} //0이 아닐 경우 에러
void ErrorExit(const char* str)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER
,NULL, WSAGetLastError()
, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(char*)&lpMsgBuf, 0, NULL);
printf("[%s]%s\n", str, (char*)lpMsgBuf);
LocalFree(lpMsgBuf);
exit(0);
}
void ErrorMsg(const char* str)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER
, NULL, WSAGetLastError()
, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(char*)&lpMsgBuf, 0, NULL);
printf("[%s]%s\n", str, (char*)lpMsgBuf);
LocalFree(lpMsgBuf);
}
void OKMsg(const char* str)
{
printf("[%s]successfully~~~\n", str);
}
MysocketError
#include "MysocketError.h"
#pragma comment(lib, "ws2_32,lib")
void ErrorExit(const char* str)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER
, NULL, WSAGetLastError()
, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(char*)&lpMsgBuf, 0, NULL);
printf("[%s]%s\n", str, (char*)lpMsgBuf);
LocalFree(lpMsgBuf);
exit(0);
}
void ErrorMsg(const char* str)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER
, NULL, WSAGetLastError()
, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(char*)&lpMsgBuf, 0, NULL);
printf("[%s]%s\n", str, (char*)lpMsgBuf);
LocalFree(lpMsgBuf);
}
void OKMsg(const char* str)
{
printf("[%s]successfully~~~\n", str);
}
MysocketError.h //헤더파일 코드(위 코드 입력하면 자동으로 생김)
#pragma once #include<stdio.h> #include<WinSock2.h> //wsa socket error void ErrorExit(const char* str); //program exit void ErrorMsg(const char* str); //monitor output void OKMsg(const char* str); |
#include "MySocketError.h"
#pragma comment(lib,"ws2_32.lib")
int main(void)
{
WSADATA wData = { 0 };
int result = -1;
result=WSAStartup(MAKEWORD(2, 2), &wData);
if (!result) OKMsg("WSAStartup");
else ErrorExit("WSAStartup");
result=WSACleanup();
if (!result) OKMsg("WSACleanup");
else ErrorExit("WSACleanup");
return 0;
}
io-syscall.c
더보기
#include <stdio.h>
#include <fcntl.h>
//#include <stdlib.h>
int main(int argc, char** argv) {
int fD, writeLen, readLen;
char rBuff[BUFSIZ];
if(argc != 2) {
fprintf(stderr, "Usage: %s [Filename] \n ",argv[0]);
return 0;
}
readLen = read(0, rBuff, BUFSIZ-1);
if(readLen == -1)
{
fprintf(stderr, "Read Error \n");
return 0;
}
printf("Total reading data: %d\n", readLen);
rBuff[readLen] = '\0';
fD = open(argv[1],O_WRONLY|O_CREAT|O_TRUNC);
if(fD == -1)
{
fprintf(stderr, "Open Error \n");
return 0;
}
writeLen = write(fD, rBuff, readLen+1);
if(writeLen == -1)
{
fprintf(stderr, "Write Error \n");
return 0;
}
printf("Total writing data: %d\n", readLen);
close(fD);
return 0;
}
#./io-syscall //파일 유무 확인 (생략가능)
#vi /io-syscall //vi 파일 생성 후 코드 붙여넣고, :wq로 저장하고 빠져나온다.
#gcc -o io-syscall io-syscall.c //입력한 코드 컴파일
#./io-syscal test //컴파일한 파일 테스트
socket-syscall.c
더보기
#include <sys/socket.h>
#include <stdio.h>
#include <fcntl.h>
int main()
{
int sD1, fD1, sD2, fD2;
sD1 = socket(PF_INET, SOCK_STREAM, 0);
fD1 = open("test",O_RDONLY);
sD2 = socket(PF_INET, SOCK_STREAM, 0);
fD2 = open("test",O_RDONLY);
printf("sD1:%d, fD1:%d, sD2:%d, fD2:%d \n",sD1, fD1, sD2, fD2);
close(sD1);
close(fD1);
close(sD2);
close(fD1);
return 0;
}
#vi ./socket-syscall.c //vi 파일 생성 후 코드 붙여넣고, :wq로 저장하고 빠져나온다.
#gcc -o socket-syscall socket-syscall.c //컴파일
#./socket-syscall //컴파일한 파일 테스트
728x90
반응형