본문 바로가기

Development/C/C++

popen() Linux Program에서 표준 출력 장치로 출력한 내용을 다른 프로그램의 입력으로 전송할 수 있습니다. 이러한 것을 파이프라 합니다. 예를 들어 'ls -a /root' 라는 명령을 실행할 경우, system() 함수를 이용하여 해당 동작을 수행가능합니다. 하지만, system() 함수의 경우 해당 명령어의 성공/실패를 확인 가능하지만, 'ls -a /root'의 결과인 디렉토리내 파일 리스트는 확인이 불가능합니다. 즉, system()을 이용한 다면 다음과 같은 과정을 거쳐야합니다. system("ls -a /root > ls_result.txt"); fd = fopen("a.txt", "r"); ... 상기와 같이 'ls -a /root'의 실행 결과를 파일로 저장한 후, 해당 파일을 열어서 해당.. 더보기
Linux C/C++ Error Code 확인방법 Linux C/C++에서 Error Code를 확인하는 방법은 다음과 같다. #include "error.h" printf("%d", errno); Linux C/C++에서는 기본적으로 발생되는 에러 코드 값이 'errno' 변수에 저장이 된다. (별도의 선언 불필요. 'error.h' 파일만 포함해주면 사용 가능) 위 소스와 같이 'errno' 값을 현재 발생된 에러 코드값이다. 단순히 에러가 발생된 지점에서 해당 변수의 값만 확인하면 된다는 간편한점도 있지만, 해당 변수의 값은 프로세스 동작에 따라 수시로 변화한다. 오류가 발생된 시점에 바로 확인하지 못한다면, 타 오류 또는 동작으로 인해 잘못된 에러 코드 값이 변경되어 있으니 주의해야한다. Eorr Code는 다음과 같이 정의되어있다. #defin.. 더보기
Network - Socket - Get Local IP Address Sample Source - Get Ip Address char szIpBuffer[30];struct ifreq ifr;struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;int sfd; printf("[ %s ] Start Get IP interface eth0\n", __FUNCTION__); memset(&ifr, 0, sizeof(struct ifreq));memset(szIpBuffer, 0x00, sizeof(szIpBuffer)); strcpy(ifr.ifr_name, "eth0");sin->sin_family = AF_INET; if (0 > (sfd = socket(AF_INET, SOCK_STREAM, 0))){printf(".. 더보기