여기에 fileptr 이라는 함수가 나오는데요, fd 로부터 FILE* 를 얻는 함수입니다. 저런식으로 FILE* 대신 임의 포인터를 대응시키고 싶은 것이죠. 지금 생각으론 해쉬밖에 방법이 없을 것 같네요. 다른 서버 소스를 찾아봐도, RTS로 되어 있는 건 거의 예제 수준 뿐이구요.
fork로 되어있는 경우는 프로세스 개별로 메모리 공간을 갖게 되고 스레드 이용한 경우는 TLS 를 이용하니, 이런 경우 참고가 되지 못하네요.
파일디스크립터로부터 스트림을 얻어오는 linkage channel 을 말씀하시는것 같습니다.
fd -> FILE * 로 쓰실때는 fdopen()
FILE * -> fd 로 쓰실때는 fileno() 를 쓰시면 됩니다.
fileptr()은 비표준화 함수이므로 쓰면 안됩니다. linkage channel 을 쓰실때는 파일커서위치가 스트림에 의해서 변경될 수 있기 때문에, 굳이 두가지를 혼용하신다면 왠만하면 파일디스크립터에 대해서는 pwrite(), pread() 계열을 사용하시기를 권장합니다.
========================================
* The truth will set you free.
맞는지 모르겠지만,
정확하게 제가 질문을 제대로 이해하지 못했을수도 있습니다. 틀린 대답이라도 이해해주시기 바랍니다.
Realtime ext. 에서 sigevent 의 구조를 사용하여 포인터를 전달할 수는 있습니다. sigevent 구조체에 보면 sigval 공용체를 사용하도록 되어있는데, 이 공용체에는 int 값이나 void * 값을 지정할 수 있습니다.
이를 이용해서 값을 전달하면 시그널을 받았을때 siginfo_t 구조체에 si_val 에 이 값을 받을 수 있습니다. 시그널 전달은 sigqueue 같은 것으로 발생시키면 될듯합니다.
========================================
* The truth will set you free.
Re: 맞는지 모르겠지만,
저도 그 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
fileptr()은 비표준화 함수입니다.
아, 제가 잘못이해했군요.
파일디스크립터로부터 스트림을 얻어오는 linkage channel 을 말씀하시는것 같습니다.
fd -> FILE * 로 쓰실때는 fdopen()
FILE * -> fd 로 쓰실때는 fileno() 를 쓰시면 됩니다.
fileptr()은 비표준화 함수이므로 쓰면 안됩니다. linkage channel 을 쓰실때는 파일커서위치가 스트림에 의해서 변경될 수 있기 때문에, 굳이 두가지를 혼용하신다면 왠만하면 파일디스크립터에 대해서는 pwrite(), pread() 계열을 사용하시기를 권장합니다.
========================================
* The truth will set you free.
Re: fileptr()은 비표준화 함수입니다.
fileptr 을 쓰겠다는 건 아니구요. 저 함수처럼 fd 에 임의 포인터를 대응시킬 수 없을까 하는 생각이었습니다. 제가 든 예가 오히려 혼란이 된 것 같네요.
결국은 epoll_ctl 처럼 사용자 포인터를 사용할 수 있어야 하는데, 그 방법을 모르겠네요. RTS 로 가능하다면 분명히 sigval 로 넘어오긴 할 것 같은데요...
Orion Project : http://orionids.org
댓글 달기