<document>
<title "stream ">
<chapter "STREAM_LIBfBNeBu">
<renew "01/10/20">
src/h/machine/stream.h

STREAM^Cv̒gQƂ邱ƂŏɌ肷邽߂ɓBɁAsrc/stream, src/machine/std/stream̒̃t@CAsrc/machineSTREAMQƂKvR[h̐擪

#define STREAM_LIB

ĎgpBȂƁA

typedef void STREAM;

LɂȂB}VˑR[hŁASTREAMQƂĂƂɂ͒ӂKvłB
</chapter>
<chapter "src/stream/s_close.c̑N[YɊ֘AƂ">
<renew "01/10/20">
<section "_">
N[ỸNeBJZNVB܂Aȉ̂悤ȃNeBJZNV݂ĂB

UNIX̂悤ɁAt@CI[vt@CfXNv^ԂꍇɁAt@CfXNv^̒lɁAgĂȂԏl𓖂Ădg݂̏ꍇAɎgĂfXNv^uԂɁAĂѓlt@CI[vɂĎg\B

XbhASTREAM * stɑ΂s_read/s_write/s_printf𔭍sA܂A}VˑɒBĂȂuԂɁA

XbhBst N[YB
̒ɃXbhCS֌ŴȂt@CI[vASTREAM * st2𓾂B܂܁Ast2̃I[vɊ蓖Ăꂽt@CfXNv^stŎgĂ̂ƓłƂB

XbhACPU蓖ĂAst̃t@CfXNv^i}VˑjQƂB̎_ŎQƂ̂́Ast2̃t@CłAԈĂB
</section>
<section "C">
eSTREAM͂ǂ̃^XNݎQƂĂ邩悤ɂBSTREAM̃wb_thread̃XgS_FILE_THREAD * threadpӂBs_read/s_write/s_printfQƂƂɁAS_FILE_THREAD * thread֎XbhidǉAQƂɂ菜B
s_closéA܂h.tblNAAVXbhSTREAMQƂ邱Ƃ̂悤ɂB̌AthreadXgQƂASTREAMQƒ̃XbhɃVOi𔭐(USR1VOi)BɂAQƒ̃Xbh͎QƑ҂𔲂EINTRG[s_read/s_write/s_printf𔲂Bs_closeׂ͂ẴXbhƂmFāAs_closẽ}VˑR[hQƂAt@CfXNv^closeB

VOi𑗂uԁAs_read/s_write/s_printfĂ񂾂}VˑɒBĂȂXbh݂\Â悤ȃ^XN̓VOi󂯂ĂAĂ܂̂ŁAVOi͒IɔAׂẴ^XNǂodg݂B

܂AVOi֐̒ŁAēxVOi֐ݒ肷鏈邪A̐ݒ肪I܂ł̒ZԂɁAVVOiƁA̎_ŃvZXIĂ܂B̂߁As_close̓VOi𔭐ẮAΉXbhǂoꂽ`FbNAǂoꂽƂmFĂ玟̃VOi𔭐Bs_closeɕĂ΂ꂽꍇ́AɂVOi̋ŁAl̖肪̂ŁAs_closẽVOi͗B̃Xbĥ݂悤HvKvB
</section>
<section "ۂ̃R[h">
src/machine/stream/s_thread.c ǉB
src/h/stream.h  S_HEADER Ɂ@S_FILE_THREAD * thread; o[ǉB

src/stream/s_read.c , src/stream/s_write , src/stream/s_printf ̊e֐̑OɁAthreadɎǉE폜֐A_s_insert_thread, s_delete_thread ǉB́Asrc/machine/stream/s_thread.cŒ`Ă(02.10.07Fsrc/stream/s_open.cŒ`Ă)Bŏ_̂́Astream_lock Ȃ֐łA_Ȃ̂́Astream_lock֐łB

̏{ꍇAmachine/stream/*read֐A҂𔺂֐ɂ́AEINTR󂯂ꍇ̏KvƂȂĂ܂B̓Iɂ́Aaccept / coneect / wai_sem VXeR[܂B܂e͂ȂłAsleep VXeR[łB

ȏ̃VXeR[gꍇ́A^[̃G[`FbNAEINTRłꍇ́AVXeR[̍یĂяos܂B̓Iɂ́Aȉ̃t@Cɏ{܂B
<pre>
src/machine/server/init.c
src/machine/client/new_connect.c
src/machine/thread/task.c
</pre>
OSɂẮAN[YfXNv^ėpɂ܂łɂȂ莞Ԃ悤ȍHvȂĂ̂͂̃ASYKpKv͂ȂB

̏ꍇ́Ah/machine/stream.hɃ_~[̊֐ȉ̂悤ɐݒ肵ĂB
<pre>
#define init_machine_stream()	(0)
#define _s_insert_thread(s,t)	(0)
#define s_delete_thread(s,t)	(0)
</pre>
</section>
</chapter>
<chapter "vZX֌W̉">
vZXԂSTREAM ̎󂯓n
<renew "02/09/02">
́AAT[o낢ȃA[LeN`ɈڐAɂāAvZX̐ƁASTREAM ̎󂯓nɃA[LeN`؂藣ȂR[hƂP̂łB܂AGLOBALBASE HTTPւ̍ڂςȂǂɂLɓƎv܂B

܂܂ŁAvZXԂŁASTREAM \̂@Ɉˑ邱ƂȂA󂯓ni܂łBUNIX nł́At@CfXNv^𒼐ڎw肵Ď󂯎邱ƂɂȂĂ܂B̓_܂B

@ƂẮASTREAM \fXNv^ȂǁA@ˑñ\[XɕAǂ̂悤ɂĕƂbZ[WƂƂɎqvZX֎AqvZXł̓bZ[WƓnꂽ@ˑn\[XƂɍč\Ƃ@łB

܂ASTREAM ̕@́ASTREAM ̎ށiOOPIɌ΃NXƂƂłBjɂĈقȂ̂ŁAs_proc_send / s_proc_recv Ƃo֐AS_TABLE ֓o^o悤ɂ܂B

s_proc_send STREAM 𕪉A@ˑn\[XƁAbZ[W֐B
s_proc_recv bZ[Wƕꂽ@ˑn\[X󂯎AƂSTREAM ֐łB
src/machine/std/stream/s_file.c Asrc/machine/std/stream/s_flush_pipe.c QlɂĂB

s_proc_send launch_proc ̂ȂŌĂ΂Ă܂BAs_proc_recv proc_recv_stream Ƃ֐Ă΂Ă܂B́A@ˑmain֐̂ȂĂ΂Ă̂ŁA@ˑ́AAȂɂSTREAM 󂯎̂悤Ɍ܂B

󂯎STREAM 
<pre>
STREAM ** recv_streams;
int recv_streams_len;
</pre>
ɔ[߂܂Brecv_streams_len ͎󂯎STREAM ̐łB
launch_proc Ɏw肵STREAM ꍇA󂯎葤́ȀԂ
recv_streams STREAM Zbg܂
</chapter>
<chapter "S_TABLE type ϐ">
<renew "02/09/02">
S_TABLE \̂ɂtype ϐ̎głAS_TABLEƂɈقȂLN^𓖂Ă͂߂܂B܂AS_TABLE ͍ŏ̏ŁAinsert_s_table gAXgɓo^Ȃ΂Ȃ܂BȂƁAqvZXSTREAM 󂯎iTƂo܂B

ݎgĂtype ͈ȉ̒ʂłB

<pre>
	f	: file
	s	: string
	c	: chain
	p	: pipe@i݂͑Ȃj
	P	: flushed pipe
	e	: terminal
	a	: accept

	s	: socket
</pre>
UNIX nł́Asocket fɓĂ܂܂B

̑AA

<pre>
	x	: XLoHTTP
</pre>
oꂵ܂B
</chapter>
<chapter "s_get_socketip">
<renew "02/9/23">
s_get_socketipS_TABLE̒̃o[ɉ܂B
</chapter>
</title>
</document>