signal()에 구조체 전달

puresupe의 이미지

안녕하세요.
IrDA를 이용한 소켓 프로그래밍을 하고있습니다.

IrDA는 센서인지라.. Asynchronous I/O가 필요하게되었습니다.

원래는 select()를 사용하다가, select()는 Synchronous I/O에 속하기때문에.

반응이 느려서. 시그널 방식을 사용하려고합니다.

소켓 디스크립터에대해서

fcntl(sd,F_SETOWN,getpid());
ioctl(sd,FIOASYNC,&arg);

와 같은 방식으로 SIGIO를 발생시키게 해놓았습니다.

signal(SIGIO,handler); 와 같이 SIGIO시 호출될 함수를 등록하였구요..

이떄 handler에는 구조체가 하나 넘어가야합니다 ㅠㅠ

KLDP의 쓰레드를 검색해본 결과

http://kldp.org/node/8930

에 저와 같은 질문의 쓰레드가 있었는데요

urmajest라는 분이

http://database.sarang.net/study/c/unix_c/21.htm#3

를 소개해주셧는데..

링크가 꺠져있어서 이렇게 글을 올립니다.

아. 참고로. 전역 구조체를 사용하진 않으려 합니다.

이것과 관련된 정보 가지고 계시는분을 기다립니다

꾸벅.

kukyakya의 이미지

깨진 링크는 http://web.archive.org 에 저장이 되어있네요.
http://web.archive.org/web/20061007003949/http://database.sarang.net/study/c/unix_c/21.htm#3

반응이 느린게 문제라면 epoll을 사용해보시는건 어떤가요?

puresupe의 이미지

코멘트가 늦었습니다. 파이어 폭스 켤 시간도 없었네요 :D

덕분에 좋은 글 읽을수 있었습니다. 그런데. 구조체와같은 데이터를 시그널 핸들러에
넘기는 방법에대해선 찾을수가 없었습니다.
아쉽지만. 결국 전역 포인터를 사용할 수 밖에없었습니다.

왠지는 알 수 없지만. SIGIO가 잘 작동 안한다는 느낌을 받았습니다.

IrDA를 사용하고 있는데요, Rx에 대해 시그널 핸들러가 호출되지 않을때가 있습니다.

시그널 핸들러가 호출되지 않는다는것은, SIGIO의 부재라고 생각을 합니다.

따라서. 어쩔 수 없이. SIGALRM을 사용해서. 일정 주기마다 핸들러를 실행시키게 해놓았습니다.

조언해주신 epoll도 좋을것같다는 생각이 듭니다.

epoll을 사용하는 것으로 한번 바꾸어 봐야겠네요.

감사합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.