같은 process 내의 다른 thread 라면, memory space를 공유하기 때문에 file 등도 같이 사용할 수 있습니다.
따라서 fopen으로 열은 file의 pointer만 공유해 준다면 다른 thread에서도 open한 file을 access할 수 있습니다.
공유하는 방법이야, fp 를 전역변수로 둔다거나, 아니면 ipc등을 이용하여 전달해 준다거나 하는 여러 방법이 있을 수 있겠지요.
오히려 이런 식으로 서로 다른 thread가 같은 file pointer를 사용할 경우에는 file 내의 위치가 내가 생각한 대로 동작하지 않게될 확률이 높아 (서로 다른 두 thread가 동시에 같은 file pointer로 access하려 한다거나 할 때) 문제가 될 수 있습니다.
위의 분이 말씀하신 dup 는 보통 pipe나 redirection 등을 구현하기 위해 사용하지 않던가요... fopen에서 사용하는 file pointer가 아닌, open 등에서 사용하는 file descripter를 복사하는 함수(더 정확히는 system call)인 걸로 알고 있습니다만...
Write를 하지 않고 읽기만 한다면 dup를 안써도 각 쓰레드마다 fopen()해서 fread()하면 되지 않나요?
물론 프로세스마다 열 수 있는 파일디스크립터가 보통 1024개이니 1024(표준입력/출력/에러 포함)정도만
열 수 있겟지만 그 이하에 대해서는 잘 동작할 것 같은데요.
시스템에서 파일디스크립터별로 다르게 동작하는 걸로 알고 있습니다.
dup라는 함수를
dup라는 함수를 리용하여 화일을 공유할수 있습니다.
dup(화일 데스크립터) : 파라메터로 이미 읽은 화일의 디스크립터를 줍니다.
file pointer를 전달해 주면 access 가능합니다.
같은 process 내의 다른 thread 라면, memory space를 공유하기 때문에 file 등도 같이 사용할 수 있습니다.
따라서 fopen으로 열은 file의 pointer만 공유해 준다면 다른 thread에서도 open한 file을 access할 수 있습니다.
공유하는 방법이야, fp 를 전역변수로 둔다거나, 아니면 ipc등을 이용하여 전달해 준다거나 하는 여러 방법이 있을 수 있겠지요.
오히려 이런 식으로 서로 다른 thread가 같은 file pointer를 사용할 경우에는 file 내의 위치가 내가 생각한 대로 동작하지 않게될 확률이 높아 (서로 다른 두 thread가 동시에 같은 file pointer로 access하려 한다거나 할 때) 문제가 될 수 있습니다.
위의 분이 말씀하신 dup 는 보통 pipe나 redirection 등을 구현하기 위해 사용하지 않던가요... fopen에서 사용하는 file pointer가 아닌, open 등에서 사용하는 file descripter를 복사하는 함수(더 정확히는 system call)인 걸로 알고 있습니다만...
각 쓰레드마다 fopen()해서 fread()하면 되지 않나요?
Write를 하지 않고 읽기만 한다면 dup를 안써도 각 쓰레드마다 fopen()해서 fread()하면 되지 않나요?
물론 프로세스마다 열 수 있는 파일디스크립터가 보통 1024개이니 1024(표준입력/출력/에러 포함)정도만
열 수 있겟지만 그 이하에 대해서는 잘 동작할 것 같은데요.
시스템에서 파일디스크립터별로 다르게 동작하는 걸로 알고 있습니다.
잘 기억은 안나지만
잘 기억은 안나지만
fopen으로 열고도 락을 얻을수 있는걸로 알고 있습니다.
lock을 걸지 않고 연다면 가능할듯합니다.
만약 fopen 으로 안된다면 걍 open 으로 fd 를 얻어온다면
읽어들이는데 아무 문제 없을듯 합니다.
============
언제나 시작
언제나 시작
댓글 달기