파일 디스크립터에 임의 포인터를 붙여줄 수 있을까요?

체스맨의 이미지

파일 디스크립터에 포인터를 대응 시킨 뒤, 어떤 시점에서 그 포인터를 얻고자 하는데요.

fd 를 키로하는 해쉬로 구현하지 않고, 파일 디스크립터에 직접 포인터를 붙여 줄 수 있는 함수가 있는 지 알고 싶습니다. fcntl 등에 있을까 해서 찾아봤는데 못찾겠네요...

혹은 RTS 에서 시그널이 발생한 파일 디스크립터로부터 사용자가 지정한 포인터를 얻는 방법이 있는지요?

sunyzero의 이미지

정확하게 제가 질문을 제대로 이해하지 못했을수도 있습니다. 틀린 대답이라도 이해해주시기 바랍니다.

Realtime ext. 에서 sigevent 의 구조를 사용하여 포인터를 전달할 수는 있습니다. sigevent 구조체에 보면 sigval 공용체를 사용하도록 되어있는데, 이 공용체에는 int 값이나 void * 값을 지정할 수 있습니다.

이를 이용해서 값을 전달하면 시그널을 받았을때 siginfo_t 구조체에 si_val 에 이 값을 받을 수 있습니다. 시그널 전달은 sigqueue 같은 것으로 발생시키면 될듯합니다.

========================================
* The truth will set you free.

체스맨의 이미지

저도 그 sigval 로 어떻게 할 수 없나 생각해봤는데요... sigqueue 로 전달한 것이 아니고, I/O 시그널이 발생했을 때에도 sigval 을 전달할 수 있는 방법이 필요하거든요. 혹시 방법이 있는지요?

제 질문이 모호하다면, 다음 사이트를 참조해주세요.

http://www.thinkage.ca/english/gcos/expl/c/lib/filept.html

여기에 fileptr 이라는 함수가 나오는데요, fd 로부터 FILE* 를 얻는 함수입니다. 저런식으로 FILE* 대신 임의 포인터를 대응시키고 싶은 것이죠. 지금 생각으론 해쉬밖에 방법이 없을 것 같네요. 다른 서버 소스를 찾아봐도, RTS로 되어 있는 건 거의 예제 수준 뿐이구요.

fork로 되어있는 경우는 프로세스 개별로 메모리 공간을 갖게 되고 스레드 이용한 경우는 TLS 를 이용하니, 이런 경우 참고가 되지 못하네요.

Orion Project : http://orionids.org

sunyzero의 이미지

아, 제가 잘못이해했군요.

파일디스크립터로부터 스트림을 얻어오는 linkage channel 을 말씀하시는것 같습니다.

fd -> FILE * 로 쓰실때는 fdopen()
FILE * -> fd 로 쓰실때는 fileno() 를 쓰시면 됩니다.

fileptr()은 비표준화 함수이므로 쓰면 안됩니다. linkage channel 을 쓰실때는 파일커서위치가 스트림에 의해서 변경될 수 있기 때문에, 굳이 두가지를 혼용하신다면 왠만하면 파일디스크립터에 대해서는 pwrite(), pread() 계열을 사용하시기를 권장합니다.

========================================
* The truth will set you free.

체스맨의 이미지

fileptr 을 쓰겠다는 건 아니구요. 저 함수처럼 fd 에 임의 포인터를 대응시킬 수 없을까 하는 생각이었습니다. 제가 든 예가 오히려 혼란이 된 것 같네요.

결국은 epoll_ctl 처럼 사용자 포인터를 사용할 수 있어야 하는데, 그 방법을 모르겠네요. RTS 로 가능하다면 분명히 sigval 로 넘어오긴 할 것 같은데요...

Orion Project : http://orionids.org

댓글 달기

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