일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- xcode11
- EditText
- 가스요금폭탄
- 온도센서
- 온도조절기
- rasppi3
- todoist
- 경동
- 에버노트
- 나비엔
- Swipes
- npm moment
- 라온익스
- anydo
- Raspberry Pi
- nodejs
- evernote
- 기름보일러
- node.js
- 가스비절약
- __attribute__
- Node
- react-native
- 난방비절약
- ReactNative
- IOT
- debounce
- 네모안
- 린나이온도조절기
- REACT
- Today
- Total
목록개발/C(C++) (15)
어허
typedef struct { BYTE command[32]; void (*set)(BYTE *); BYTE hidden; BYTE usage[128]; }Fp; code Fp fn_cli[] = { {"show all",show_all_config,ON," show all : can you see all config",}, } void main(){ // cmd_string input... for(i=0;i
select 함수를 사용하여 timeout을 걸고 싶을 때 while(1) { tv.tv_sec = 1; tv.tv_usec = 0; state = select(sockfd+1, &readfds, NULL, NULL, &tv); switch(state) { case : break; } } 이렇게 while문 안에 써야된다. tv 스트럭트 내용은 타임 아웃 걸리고 나면리셋 되는건지 안걸리고 select 동작 하면 리셋 되는건지는 모르겠지만 아무튼 ! while문 안에 꼭 쓰자 ! 이런 주의사항은 여지껏 socket 관련 내용을 찾아봐도 저거 주의해야한다는 말은 없었다. 뭐,,,당연하다 생각할 수 있지만 나같은 기본이 안된 사람들은 조심해야할 듯 ㅎㅎ 요게 무한루프에 빠지니까 cpu점유율이 98%를 웃돈다
출처 : http://blog.naver.com/PostView.nhn?blogId=kgw1729&logNo=140062753310&redirect=Dlog&widgetTypeCall=true CRC(Cyclic Redundancy Check) CRC는 생성 다항식(generator polynominal)이라 불리는 고정 크기의 키 값(제수, divider)으로 데이터 블럭의 값을 차례대로 나누어서 그 나머지를 누적시키는 일종의 해시 함수이다. 이때 생성 다항식을 어떤 값으로 선택하느냐에 따라 데이터 블럭 내의 오류 패턴을 검출하는 능력에 영향을 미치게 된다. 보통 한 두개의 비트 오류는 물론 연속적으로 비트 오류가 발생되는 버스트 에러까지도 99.99% 이상 감지한다. 국제 표준으로 아래 3가지의 생성..
출처: http://hayanmail.com/jsy CRC(Cyclic Redundancy Check)는 시리얼 전송에서 데이타의 신뢰성을 검증하기 위한 에러 검출 방법의 일종이다. 간 단한 에러 검출방법으로는 parity 비트에 의한 방법과 check-sum에 의한 에러 검출 방법이 있지만 parity 비트에 의한 방법은 데이타 중에 한꺼번에 2비트나 4비트가 변하게 되면 검출을 할 수 없고, check-sum에 의한 방법은 한 바이트에서 +1, 다른 바이트에서는 -1로 에러가 생기는 경우만 해도 에러는 검출 되지 않는다. 즉, 이들 방법으로는 에러를 검출해 낼 수 있는 확률이 대단히 낮다. CRC에 의한 방법은 높은 신뢰도를 확보하며 에러 검출을 위한 오버헤드가 적고, 랜덤 에러나 버스트 에러를 포함..
리눅스 c 에서는 atoi는 있지만 itoa 는 제공되지 않는다 ! 도스나 윈도우환경의 c 에는 제공된다고 한다 char *ltoa(int val, int base) { static char buf[32] = {0}; int i = 30; for(; val && i ; --i, val /= base) buf[i] = "0123456789abcdef"[val % base]; return &buf[i+1]; } 어딘가에서 퍼온 것
정확한 원인은 모르겟지만 나의 경우 server-client 통신간에 서버가 먼저 미정상 종료가 되었을때 다시 실행하려고 하면 bind 에러가 난다 뭔가 타임아웃이 걸려있는것 같이 잠시후엔 다시 되고 ,, 참고 : http://kldp.org/node/1962 SO_REUSEADDR 옵션을 설정해주면 된다한다 if(setsockopt(server_sockfd, SOL_SOCKET, SO_REUSEADDR, (void *)&opt, sizeof(opt)) == -1) print_err(">>>>>>>>>>>>>>>>> setsockopt error"); 저 옵션이 뭔지는 차차 소켓통신에 대해 공부를 더 해가면서 알아가야 겠고 , 도스나 윈도우에선 순서도 상관없지만 리눅스에선 순서도 중요하단다 socket_..
세번씩만 확인하자 ! 이리찍고 저리찍고
@@안됨! 만약 된다하더라도 좋은코드가 아님! 사용하지 말것 ! struct 안에 생성되는 배열의 크기를 fix 시키지 않고 가변적으로 그때그때 다르게 만들고 싶었다 ! 485표준에 data는 가변 ,,,, 그래서 포인터도 집어넣어 보고 온갖 삽질을 하다가 kldp에서 이상한 글을 발견하고 http://kldp.org/node/23923 해봤더니 된다 ! 배열선언시에 배열 크기 부분에 [0] 을 넣자 ! struct{ xxxxx UINT8 packet[0]; } xxxx ; 하면 xxxx.packet[]의 크기는 그때그때 다르게 만들수 있다 struct가 아닌 일반 배열에서는 적용 안된다네 ~ zero length array 라고하는데 study 할 것