[완료]서로 다른 프로세스에서 파일디스크립터를 공유할수 있을까요??(linux 에서)(첨부파일참조)

hogi2271의 이미지

/
/
/

A Process==========================B Process==========
=fd=open(a.txt)=======================================
=lseek(fd,100,CUR)====================================
=sleep(200);========= =====================================get(filename),===
=offset==100=====================lseek(fd)(불가)=======

... B process에서 A process의 offset 값인 100을 가져 오고 싶습니다..

B에서는 fd 및 filename는 proc을 통하여 가져 올수 있으나..

a.txt의 파일스크립터는 A프로세스에만 있기 때문에 B에서는 fd로 연산 하는 것은 불가 하게 됩니다
(불가능이라기 보다는 의미가 없다고 해야겠죠..)

그래서 A의 offset정보를 가져 올수가 없습니다..

B에서 A의 a.txt에 대한 파일 스크립터를 볼수 있는 방법이 없을까요??

;; 첨부파일에 자세히 나와 있습니다... 궁금증이.. html에는 .. 아는게 없어서..;;

File attachments: 
첨부파일 크기
Image icon hogi2271_01.jpg43.8 KB
ganadist의 이미지

http://ganadist.tistory.com/306568 를 참조하세요.

당연히(?) 리눅스에서만 됩니다.

SunOS와 BSD에서도 된다고 합니다;;

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

cmoh1110의 이미지

A 프로세스에서 file open 후에 B를 fork()로 띄우면 안되나요?
서로 전혀 관계없는 프로세스라면 우째야할지..-_-?

ganadist의 이미지

예제로 간단하게 만들기 위해서 fork()를 쓴겁니다.

소스를 보시면 아시겠지만 fork()를 호출 한 다음에 파일을 연겁니다.

부모,자식 프로세스가 아니라도 상관없습니다.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

bushi의 이미지

믿기지 않는데요.
원본을 봐도 fileno() 만 전송하는 것이 전부인데, 이것만으로 별개의 프로세스사이에 fd 공유가 될까요 ?

file desctiptor 는 커널에서 각 프로세스 개별적으로 유지관리 합니다.
http://lxr.linux.no/source/include/linux/sched.h#L933
부터 추적하시면 됩니다.

유지/관리하는 구체적인 내용(contents)은
http://lxr.linux.no/source/include/linux/fs.h#L708
에서 확인할 수 있습니다.

task.files->fdt->fd 들 중의 인덱스값만 떨렁 전송해놓고 뭔가 공유되기를 바라는 것은 심하게 무리라 생각합니다.

hogi2271의 이미지

A라는 프로세스는 제가 만든 프로세스가 아니라 ..

기존에 완성된 프로세스입니다...

A프로세스에 대해 제가(B프로세스) 할수 있는것.. 잠시 멈추어 두었다가 필요한 정보들만 빼내올수 있는것이 전부입니다.

이소스를 사용할려면..A에 sendfd()라는 함수가 호출 되어야 하는데.. 할수가 없다는것입니다..

ptrace를 이용하여 ...

B가 ... A에다가 .. 함수를 심어 둘수는 없을까요 하하 ;;;

그렇게 되면.. 문제가 간단히 해결되는데...

^^/

ganadist의 이미지

공유라이브러리의 함수라면 같은 이름의 함수를 만들어서 다른 공유라이브러리로 만든 다음 LD_PRELOAD라는 환경변수에 해당 라이브러리의 경로를 설정하면 됩니다. 원래 함수가 아닌 새로 만든 라이브러리의 함수가 동작합니다.

ld.so의 man 페이지를 참조하세요.

static build면... 답 없습니다 ;;

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

댓글 달기

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