프로그래밍 QnA

rebirth의 이미지

extern "C" 질문

안녕하세요.
C 소스를 보다보면 extern "C"라는 걸 많이 쓰는데요..

#ifdef __cplusplus
extern "C" {
#endif

...

#ifdef __cplusplus
}

책을 찾아봐도 정확한 의미를 잘 모르겠네요.
대충 C와 C++간에 stack frame을 처리하는 차이때문이라던데
(음.. 맞나요? -_-a)
주로 C로 작성할때 위와 같이 많이 사용하는건가요?
아시는분 알려주세요~ 감사합니다 ^^

은영신랑의 이미지

#ifdef DEBUG 사용하는데 있어서요...

대략 다음과 같이 coding 하였습니다.

#ifdef DEBUG
#define DPRINTF(x) fprintf(stderr, "%d : "x, __LINE__)
#else
#define DPRINTF(x)
#endif

int main()
{
int a;
...

DPRINTF(" a : %d\", a);

..
}

제 목적은 디버그모드로 컴파일 하면 Line Number : a : ?
이런식으로 하려는데요,
위 소스를 컴파일하면 DPRINTF passed 2 arguments, but takes just 1
이라는 에러가 나오네요..

도움좀 부탁합니다.

firster의 이미지

fork()와 exec() 개념 좀 설명해주세요.

유닉스 시스템을 접한 것이 몇일되지 않습니다.
나름대로 책도 구입하고 공부하고는 있습니다만, 모르는 것이 너무 많아서 막막해지는군요.
오늘은 오전부터 지금까지 fork와 exec,clone 시스템 호출의 개념을 잡지 못해서 열만받고 있습니다.
맨페이지 및 여기서도 검색을 해봤지만, 솔직히 이해가 되지 않더군요.
간단히라도 개념적인 설명 및 차이점을 알려주시면 정말 감사하겠습니다.
답변에 미리 감사드립니다.

kang0203의 이미지

파일 입출력시

안녕하세요.
간단한 파일 입출력을 할때 궁금한 점이 있어서여..

만약 한 파일에 대해 open을 하고 write나 read를 할때
다른 사용자도 같이 write나 read를 할 경우 문제가 되는 점이 있나여..
동시에 write나 read를 한다 해도 커널이 알아서 먼저 온 프로세스를 실행시키고
다른 프로세스는 대기 시키지 않나 해서여.. 이게 동기화문제져?
만약 문제가 있다면 어떻게 처리를 해주어야 하는지여??

질문을 하고보니 먼 말인지 ..... 그럼 미리 감사합니다.....

young93의 이미지

커널모드 소켓 프로그래밍 실행시 Warning: kfree_skb on hard I

디바이스 드라이버 모듈을 작성하고 있습니다.

커널 모드에서 sock_create()로 UDP 소켓을 열고
sock_sendmsg(), sock_recvmsg()를 이용하여
패킷을 주고 받는 프로그램을 짰는데,
패킷 수신시 이런 경고 메시지가 뜨네요

Warning: kfree_skb on hard IRQ c0098e50

뭐가 문제가 있어서 그런 걸까요.
에러가 아니고 경고니까 그냥 무시해도 상관이 없을까요?
조언 부탁드립니다.

아래는 소스입니다.

[code:1]
int recv_udpmsg(int sid, unsigned int *ip, unsigned short *port,
char *data, int len)

hskim5048의 이미지

리눅스 아카이브라이브러리를 .so 로 만드는 방법좀 알려주세요

리눅스에서 xxx.a 를 xxx.so 로 만들어야 되는데요
xxx.so 를 만든후에 nm 으로 확인해 보면
nm : xxx.so: File format not recognized 이런 에러가 나네요.

오브젝트를 .so 로는 만들어지는데요, 왜 아카이브는 안되는지 모르겠네요.
제가 만든 방법은 아래와 같습니다.
ld -o xxx.so xxx.a -G

waltherppk의 이미지

C 사용법

C 에서는 라이브러리를 어떻게 추가하나요 ?
Java 에서처럼 그냥 복사해다가 디렉토리에 추가만 해주면되나요 ?

그리고 헤더파일을 구현하는 코드에서도
헤더파일을 include만 하는게 좀 혼란스럽네요
이경우에는 어떻게 컴파일 해야하는 건가요 ?

Java 공부하다가 C 공부하려니까
Generic 개념이 좀 당황스럽네요.
명쾌한 해설 없을까요 ?

shean0의 이미지

통신에서 close를 늦게 하고 싶을때...

제가 하려는 의도는 간단합니다.
상황설명::
TCP통신에서 지금 아래 구현한 서버(main_server),
그리고 중간에 경유지 역활을 하는 middle_server,
그리고 client가 있습니다.
그런데 middle_server의 특징이 , 아래의 순서대로 움직입니다.
client==>요청--> middle-->요청==>main
<==응답<--middle<--응답<== main
-->socket close
<--> <--> 소켓 middle가 close
<--> main close

jinhoy의 이미지

각 code별루 해석해 봅시다.

Seasoned Hacker


% cc -o a.out ~/src/misc/hw/hw.c 
% a.out 
Hello, world. 

위의 % cc -o a.out ~/src/misc/hw/hw.c 를 보자면.. 이미 자기 디렉토리에

아래에 과거에 숙제 한게 있다는 뜻이겠지요.

Guru Hacker

% cat 
Hello, world. 

이거요? cat이란게 shell에서 화면에 출력하는거지요, C로 코딩할 필요가

없는 건 shell로 승부한다는 거지요.

seeker의 이미지

pipe( int fd[2] ) 질문입니다.!

int pipe( int fd[2] )
라고 선언이 되어있는데요.

int fd[2]라는 인수선언은 int *fd로 표현하는것이 더일반적이지 않나요?

어차피 fd[2]라고 해도
함수내부에서 fd+3 또는 fd[3]이란 표현이 사용될지라도
컴파일러에 의해 out of 인덱스체크는 안되지 않습니까?

단지, 파이프가 2개의 fd를 리턴하므로 그것을 알리려는 목적때문에 그렇게
선언이 되있는것으로 생각이 됩니다.

페이지

프로그래밍 QnA 구독하기