콜백함수의 구현?

익명 사용자의 이미지

윈도우 비주얼 C++로 작업할 때 콜백함수를 사용해서 구현한 것이 있습니
다.

만약에 라이브러리가 있고, 이걸 사용하는 어플리케이션이 있을 때
어플리케이션의 특정 함수의 호출이 라이브러리에서의 특정 코드에서
이루어진다는 것입니다.
이를 위해서 어플리케이션은 특정함수의 포인터를 미리 라이브러리
쪽에 등록하도록 되어 있습니다.

예를 들면,(좋은 예는 아닌 것 같지만)
서버/클라이언트 소켓은 라이브러리에 두고
어플리케이션은 패킷을 받아서 처리한다고 하면
라이브러리의 recv()에 특정 메세지가 수신되면 어플리케이션의
특정 함수를 호출하도록 할 수 있습니다.

콜백함수에 대해 설명드린 건데요(나만 모르나 -_-;;)
리눅스에서는 이런 매카니즘을 어떻게 구현할 수 있습니다.

다시 말씀드리면,
라이브러리에서 특정한 일이 일어나면,
(어플리케이션쪽에서 등록하기 전까지는)이름도 알 수 없는 함수를
호출해야 합니다. 이런 일은 마찬가지로 많이 있을 것 같은데
어떻게 구현해야 되나요?

읽어주셔서 감사합니다.
답변해주신 분들께도 미리 감사드립니다.
수고하세요.

익명 사용자의 이미지

http//kldp.org/script/bbs/read.php?table=qa2&no=4191&o[sc]=a&o[ss]
=MOREFEXE&o[st]=a&o[at]=s&o[sct]=s&o[stt]=s

이런식으로 함수 리스트를 만들고
님이 말하는 이벤트 핸들러를 사용하면 넷트윅 프로그램이 쉬워지겠죠

libevent
http//freshmeat.net/projects/libevent/?topic_id=809

익명 사용자의 이미지

콜백함수 형태를 구현하는데
운영체제와 무슨 상관이 있겠습니까?

http//kldp.org/script/bbs/read.php?table=qa2&no=3605&o[sc]=n&o[ss]=%BF%C1%C1%A4%C8%C6&o
[st]=a&o[at]=s&o[sct]=s&o[stt]=s
여기 한번 보시죠.
이 질문을 하신 분이 직접 작성한 코드인데
이 경우가 바로 콜백함수를 사용하는 예가 되겠네요.

한번 더 말씀드리지만 운영체제와는 하등의 관계가 없는 내용입니다.
윈도우 프로그래밍을 하게 되면
WinMain() 다음 제일 처음 작성하게 되는 윈도우 프로시져부터가 콜백이라
윈도우와 콜백이 아주 친한 것처럼 오해하기 쉽기는 하겠네요.
윈도우 프로시져 뿐만이 아니라
WIN32 API 중에서도 콜백형태가 상당히 많긴 하죠.

아뭏든 콜백형태는 라이브러리를 제작하게 될 경우
자주 취하게 되는 형태인데 꼭 그래야 하는 것도 아니고
단지 그런 형태를 취할 수도 있다는 거죠.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.