Blocking, NonBlocking

  • 블록킹, 넌블록킹의 분류 기준은 대기(waiting, sleeping) 여부이다.
  • 블록킹(blocking)
    • 성공 또는 실패할 때 까지 대기 하므로 항상 성공 또는 실패의 두가지 리턴 상태가 존재한다.
  • 넌 블록킹(Non
    • 대기가 존재하지 않으므로 작업 요청 성공이든 실패든 무조건 즉시 처리하고 리턴한다.
    • 반환 패턴은 성공, 실패, 부분성공으로 있으며, 기능에 따라 부분성공은 지원하지 않을 있다.
  • ex)
    • send 함수 호출 -> 소켓의 송신 버퍼에 빈공간이 없는 경우
      • Blocking
        • 버퍼에 빈공간이 확보될 때까지 대기
      • Non Blocking
        • 즉시 실패
        • 송신 요청된 버퍼 크기 > 버퍼 공간 인 경우
          • 부분 성공으로 리턴

Synchronous, Asynchronus

  • 동기, 비동기의 분류 기준은 순서(order) 이다.
  • 동기(Synchronous)
    • 순서대로 처리하는 것이다.
    • in-order 처리되는 형태를 동기 모델이라고 부른다.
  • 비동기(Asynchronous)
    • 처리의 순서가 보장되지 않는 것이다.
    • out of order 처리되는 형태를 비동기 모델이라고 부른다.

윈도우 환경에서 . 으로 시작하는 파일을 생성하려고 할 때 다음과 같은 문제가 발생한다.



이때 파일명 끝에 .을 붙이면 간단히 해결 할 수 있다.


파일명 끝에 .이 생략 되면서 원하는 파일이 생성 됨을 확인 할 수 있다.


원격 디렉토리에서 로컬 디렉토리로 드래그 앤 드롭으로 다운로드 후 원격 디렉토리의 파일이 삭제 되는 경우 설정



설정 -> 드래그 앤 드롭 -> 임시 폴더 사용

으로 설정 후 다시 해보면 원격 디렉토리의 파일이 삭제되지 않는다.

makefile & nmake 를 사용 하여 dll 파일을 생성 할 때 버전 정보를 넣는 방법.


version.h
#ifndef VERSION_H
#define VERSION_H

#define VER_FILEVERSION                 1,0,0,0
#define VER_FILEVERSION_STR         "1.0.0.0\0" //` 파일 버전
#define VER_COMPANYNAME_STR         ""
#define VER_FILEDESCRIPTION_STR     "" //` 파일 설명
#define VER_INTERNALNAME_STR        ""
#define VER_LEGALCOPYRIGHT_STR      "Copyright @ 2018"
#define VER_LEGALTRADEMARKS1_STR    "All Rights Reserved"
#define VER_LEGALTRADEMARKS2_STR    VER_LEGALTRADEMARKS1_STR
#define VER_ORIGINALFILENAME_STR    "" //` 원본 파일 이름
#define VER_PRODUCTNAME_STR         "" //` 제품 이름
#define VER_COMPANYDOMAIN_STR       ""
#endif // VERSION_H

version.rc
#include <windows.h>
#include "version.h"

VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName",        VER_COMPANYNAME_STR
            VALUE "FileDescription",    VER_FILEDESCRIPTION_STR
            VALUE "FileVersion",        VER_FILEVERSION_STR
            VALUE "InternalName",       VER_INTERNALNAME_STR
            VALUE "LegalCopyright",     VER_LEGALCOPYRIGHT_STR
            VALUE "LegalTrademarks1",   VER_LEGALTRADEMARKS1_STR
            VALUE "LegalTrademarks2",   VER_LEGALTRADEMARKS2_STR
            VALUE "OriginalFilename",   VER_ORIGINALFILENAME_STR
            VALUE "ProductName",        VER_PRODUCTNAME_STR
        END
    END

    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1252
    END
EN

Makefile

RSC      = rc.exe

OBJDIR  =.\obj
RSC_PROJ=/l 0x412 /fo"$(OBJDIR)\version.res" /d "NDEBUG"

LIB_OBJ = $(OBJDIR)\version.res

#라이브러리 생성 FLAG에 $(LIB_OBJ) 포함

"$(OBJDIR)\version.res" : .\src\version.rc $(OBJDIR)
     $(RSC) $(RSC_PROJ) .\src\version.rc


인스톨쉴드 스크립트로 프로그램을 배포 할 때, 재배포 패키지의 설치가 필요할 때가 있다.

스크립트 begin 아래에 코드를 작성한다.


szProgram = "vcredist_x64";
szCmdLine = "/q";

if ( LaunchAppAndWait(szProgram, szCmdLine, WAIT) < 0 ) then
        MessageBox("Fail to install vcredist_x64.exe", SEVERE);
endif;


참고 사항


- 설치 프로그램과 같은 폴더에 "vcredist_x64.exe" 파일이 존재 해야 한다.

- "/q" 옵션은 자동 설치를 위한 옵션으로, 수동 설치를 원할 시 해당 옵션을 제거 한다.

우분투 환경에서 로컬 git 으로 작업 하던 내용을 온라인 github 로 push 하는 방법은 아래와 같다.


1. https://github.com/ 로그인

2. 신규 프로젝트 생성

- "Repository name" 항목 기입

- Create repository 버튼 클릭

3.  로컬 작업 디렉토리 이동

4. 원격 서버 등록

- git remote add origin https://github.com/<주소>/<Repository name>.git

5. 데이터 push

- git push -u origin master

- 아이디, 패스워드 입력 하면 로컬 git 내용이 원격지에 push 된다.


명령어 요약

git remote add origin https://github.com/<주소>/<Repository name>.git

git push -u origin master



ubuntu 설치 후 IP를 확인 하기 위한 ifconfig 명령어는 기본적으로 설치 되어 있지 않다.


ifconfig 대신에 사용 할 수 있는 명령어

#ip addr 


apt-get으로 ifconfig 설치 하기

#sudo apt-get install net-tools


윈도우 10 에서 vmware 사용 중 다음과 같은 에러가 발생 하였다.

VMware Workstation and Device/Credential Guard are not compatible. ~~~


해결 방법

1.윈도우 + R -> appwiz.cpl

2. Windows 기능 켜기/끄기 -> Hyper-V 폴더 체크 해제

3. 재부팅


+ Recent posts