프로그래밍 QnA

metalwolf의 이미지

c 매크로 기능에 대해서 여쭤 보겠습니다.

다름이 아니라 VC++ 6.0은 되는데 g++에서는 안되는 군요.

예전엔 되었다고 생각했는데..

#include <stdio.h>

#define Log(x) printf(x)

int main(void)
{
int nTest = 0;
int nTest2 = 3;
Log("Test[%d][%d]\n",nTest,nTest2 );

return 0;
}

위와 같이 printf를 Log로 define 하면 vc++ 6.0에는 경고를
내더라도 컴파일이 되고 잘 작동 되는데

g++에서는 되지 않군요.

에러는 다음과 같습니다.

macro_test.cpp:12:19: macro "Log" passed 2 arguments, but takes just 1
macro_test.cpp: In function `int main()':

leo~~~~의 이미지

시리얼 버퍼가 꽉찬거 같은데요...

임베디드 보드에 리눅스를 포팅하구요
시리얼 프로그램을 만들어서 보드로 보내고
PC와 보드를 연결해서 PC에서 데이터를
보내면 보드에서 데이터를 받아서
그래프를 그리는데요....
시리얼을 통해서 데이터를 보내는데
약 1000개 정도 보내면 시리얼 버퍼가 꽉차서 그런지
더이상 받지를 못하네요....
그렇다고 프로그램이 죽는 것도 아니고....
버퍼가 꽉차서 그런건가요??아니면 다른 문제인가요??
만약 그렇다면 시리얼 버퍼를 어떻게 비우나요??

superkkt의 이미지

#ifndef 사용법에 대한 질문입니다.

[code:1]#include <stdio.h>
#include <sys/types.h>

#ifndef uint_t_define
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#define uint_t_define
#endif

struct ip_header {
uint8_t version_ihl;
uint8_t tos;
uint16_t len;
uint16_t ident;
uint16_t flags_fragment;
uint8_t ttl;
uint8_t protocol;
uint16_t cksum;
uint32_t src;
uint32_t dst;
};

struct tcp_pseudo_header {
uint32_t src;
uint32_t dst;
uint8_t not_use;
uint8_t protocol;
uint16_t len;
};

struct tcp_header {

cococo의 이미지

Block mode로 read 할 때 시피유 사용에 관한 질문입니다.

안녕하십니까. 주말 잘 보내셨는지요. 오늘도 어김없이 질문을... -_-;;

pipe로 흘러 들어오는 데이터를 read() 로 읽어 처리하려 하는데요. 이걸 Thread에서 처리합니다.

근데, 만일 보내는 쪽에서 무언가 사정이 생겨서 뮝기적 거리면, read() 는 데이터 다 들어올 때까지 기다리잖아요?
그렇다면, 기다리는 동안, cpu잡아 먹나요? 아님 block되어 있으면 자동으로 context switching 되서 다른 것(thread던, process던 간에) 이 실행되도록 하나요?

아시는 분... 답변 좀... ^^;;

superkkt의 이미지

IP 헤더를 만들때 1바이트 미만도 엔디안을 고려해야 하나요?

아래와 같이 IP 헤더 구조체를 선언했습니다.

struct ip_header {
	uint8_t		version:4;
	uint8_t		ihl:4;
	uint8_t		tos;
	uint16_t	len;
	uint16_t	ident;
	uint8_t		flags:3;
	uint16_t	fragment:13;
	uint8_t		ttl;
	uint8_t		protocol;
	uint16_t	cksum;
	uint32_t	src;
	uint32_t	dst;
};

그리고 아래와 같이 값을 대입한 후.. 길어서 뒤에는 생략했습니다.

	ip->version = 4;
	ip->ihl = 5;
	ip->tos = 0;

이렇게 패킷을 만들고 raw socket으로 보냈는데 제대로 동작을 안해서 tcpdump로 패킷을 찍어봤더니 바로 위 부분이 의도한대로라면 4500으로 나와야 되는데 5400으로 나오네요. (아래 dump 중 첫번째 줄 마지막 부분)

mr.lee의 이미지

trac 의 위키문서를 pdf로 변환

프로젝트 형상관리 및 이슈트래킹으로 trac을 사용하고 있습니다.
상세설계문서를 ms word로 작성하지 않고 trac의 위키에서 작성할려고 합니다만.. 때론 외부문서로 뽑아내야 할 필요성이 있는데요..
trac의 위키문서를 (moinmoin 포맷과 거의 같다고 알고있습니다) word나 pdf로 변환해주는 툴이 있는지요?

mr.lee의 이미지

java 에서 message queue 사용

자바에서 C/C++과의 IPC를 위해 메세지큐를 사용 할려고 합니다.
JNI로 해야할것 같은데 관련 자료나 정보있으시면 부탁드립니다.

JMS 도 C/C++ 인터페이스가 있긴 하지만, 메세지 방식의 미들웨어 프레임웍이 필요한게 아니라 실제 커널에서 관리되는 IPC 설비인 message queue를 사용해야만 하는 상황이라서요.

JNI에서 메세지큐 사용하는거랑 unix domain socket으로 통신하는거랑 두가지를 검토중입니다..각각 장단점이 있을것 같은데.
여기에 대한 조언도 해주

lovemyin의 이미지

Arcnet 에 관하여

안녕하세요.
Arcnet으로 나오는 데이터를 캡쳐링 하는 방법을 알 수 없을까해서 이렇게 글을 올립니다.
Arcnet이라는 것 자체가 생소해서 어떻게 시작을 해야할지 막막하네요. 혹시 Arcnet을 경험해보신분이 있으시면 좋은 조언 부탁드립니다.

체스맨의 이미지

RTS 에서 파일 디스크립터마다 고유의 데이터를 부가할 수 있을까요?

epoll 은 fd 에 입출력 이벤트가 발생한 경우, epoll_ctl 호출시 struct epoll_event* 인자에 저장해둔 포인터값을 얻어올 수 있습니다.

그런데 RTS 로 이와같은 구현을 어떻게 할 수 있는지 모르겠는데요.
sigqueue 에 의해 sigval 을 보낼 수는 있지만, 입출력 시그널이 발생할 때 sigval 을 보내는 방법은 찾지 못했습니다.

그래서 지난번에 다음과 같은 질문을 올렸습니다만,
http://bbs.kldp.org/viewtopic.php?t=69025
제가 구현하려는 의도에 너무 치우쳐서 제가 알고싶은 본질을 제대로 전달하지 못했던 것 같아 다시 질문 드립니다. RTS 에 의해 어떻게 할 수 있는지를 결국 못찾았기 때문에, fd 에 임의 포인터를 대응시킬 방법이 있을지 모른다는 생각에 지난번과 같은 질문을 드렸었구요. 이 방법도 찾지 못했습니다.

powerc20의 이미지

포인터 + 포인터 에서 컴파일 에러 문제입니다.

포인터 + 포인터에서 에러가 발생하는 이유를 알고 싶어 글 남깁니다. 에러 종류( error: invalid operands to binary )

아래는 제가 테스트 해 본 파일과 실행 결과입니다.

컴파일 환경은

[powerc20@step09 app]# gcc -v
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux

페이지

프로그래밍 QnA 구독하기