ืžืขืจื›ื•ืช ื”ืคืขืœื”: ืฉืœื•ืฉื” ืคื™ืกื•ืช ืงืœื•ืช. ื—ืœืง 3: ืžืžืฉืง API (ืชืจื’ื•ื)

ืžื‘ื•ื ืœืžืขืจื›ื•ืช ื”ืคืขืœื”

ื”ื™ื™ ื”ื‘ืจ! ื‘ืจืฆื•ื ื™ ืœื”ื‘ื™ื ืœื™ื“ื™ืขืชื›ื ืกื“ืจืช ืžืืžืจื™ื-ืชืจื’ื•ื ืฉืœ ืกืคืจื•ืช ืžืขื ื™ื™ื ืช ืื—ืช ืœื“ืขืชื™ - OSTEP. ื—ื•ืžืจ ื–ื” ื“ืŸ ื‘ืื•ืคืŸ ื“ื™ ืขืžื•ืง ื‘ืขื‘ื•ื“ื” ืฉืœ ืžืขืจื›ื•ืช ื”ืคืขืœื” ื“ืžื•ื™ื•ืช ื™ื•ื ื™ืงืก, ื›ืœื•ืžืจ ืขื‘ื•ื“ื” ืขื ืชื”ืœื™ื›ื™ื, ืžืชื–ืžื ื™ื ืฉื•ื ื™ื, ื–ื™ื›ืจื•ืŸ ื•ืจื›ื™ื‘ื™ื ื“ื•ืžื™ื ืื—ืจื™ื ื”ืžืจื›ื™ื‘ื™ื ืžืขืจื›ืช ื”ืคืขืœื” ืžื•ื“ืจื ื™ืช. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ืžืงื•ืจ ืฉืœ ื›ืœ ื”ื—ื•ืžืจื™ื ื›ืืŸ ื›ืืŸ. ืฉื™ืžื• ืœื‘ ืฉื”ืชืจื’ื•ื ื ืขืฉื” ื‘ืฆื•ืจื” ืœื ืžืงืฆื•ืขื™ืช (ื“ื™ ื—ื•ืคืฉื™), ืื‘ืœ ืื ื™ ืžืงื•ื•ื” ืฉืฉืžืจืชื™ ืขืœ ื”ืžืฉืžืขื•ืช ื”ื›ืœืœื™ืช.

ื ื™ืชืŸ ืœืžืฆื•ื ืขื‘ื•ื“ืช ืžืขื‘ื“ื” ื‘ื ื•ืฉื ื–ื” ื›ืืŸ:

ื—ืœืงื™ื ืื—ืจื™ื:

ืืชื” ื™ื›ื•ืœ ื’ื ืœื‘ื“ื•ืง ืืช ื”ืขืจื•ืฅ ืฉืœื™ ื‘ื›ืชื•ื‘ืช ืžึดื‘ืจึธืง =)

ืื–ืขืงื”! ื™ืฉ ืžืขื‘ื“ื” ืœื”ืจืฆืื” ื”ื–ื•! ืชืจืื” github

ืชื”ืœื™ืš API

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ืœื™ืฆื™ืจืช ืชื”ืœื™ืš ื‘ืžืขืจื›ืช UNIX. ื–ื” ืงื•ืจื” ื‘ืืžืฆืขื•ืช ืฉืชื™ ืฉื™ื—ื•ืช ืžืขืจื›ืช ืžื–ืœื’() ะธ exec ().

Call fork()

ืžืขืจื›ื•ืช ื”ืคืขืœื”: ืฉืœื•ืฉื” ืคื™ืกื•ืช ืงืœื•ืช. ื—ืœืง 3: ืžืžืฉืง API (ืชืจื’ื•ื)

ืฉืงื•ืœ ืชื•ื›ื ื™ืช ืฉืžื‘ืฆืขืช ืงืจื™ืืช fork() . ื”ืชื•ืฆืื” ืฉืœ ื‘ื™ืฆื•ืขื• ืชื”ื™ื” ื›ื“ืœืงืžืŸ.

ืžืขืจื›ื•ืช ื”ืคืขืœื”: ืฉืœื•ืฉื” ืคื™ืกื•ืช ืงืœื•ืช. ื—ืœืง 3: ืžืžืฉืง API (ืชืจื’ื•ื)

ืงื•ื“ื ื›ืœ, ืื ื—ื ื• ื ื›ื ืกื™ื ืœืคื•ื ืงืฆื™ื” main() ื•ืžื“ืคื™ืกื™ื ืืช ื”ืžื—ืจื•ื–ืช ืœืžืกืš. ื”ืฉื•ืจื” ืžื›ื™ืœื” ืืช ืžื–ื”ื” ื”ืชื”ืœื™ืš ืฉื‘ืžืงื•ืจ ื ืงืจื ืžื—"ืฉ ืื• ืžื–ื”ื” ืชื”ืœื™ืš. ืžื–ื”ื” ื–ื” ืžืฉืžืฉ ื‘-UNIX ื›ื“ื™ ืœื”ืชื™ื™ื—ืก ืœืชื”ืœื™ืš. ื”ืคืงื•ื“ื” ื”ื‘ืื” ืชืงืจื fork(). ื‘ืฉืœื‘ ื–ื” ื ื•ืฆืจ ืขื•ืชืง ื›ืžืขื˜ ืžื“ื•ื™ืง ืฉืœ ื”ืชื”ืœื™ืš. ืขื‘ื•ืจ ืžืขืจื›ืช ื”ื”ืคืขืœื”, ื ืจืื” ืฉืคื•ืขืœื™ื ื‘ืžืขืจื›ืช 2 ืขื•ืชืงื™ื ืฉืœ ืื•ืชื” ืชื•ื›ื ื™ืช, ืฉื‘ืชื•ืจื” ืชืฆื ืžืคื•ื ืงืฆื™ื™ืช fork() . ืชื”ืœื™ืš ื”ื™ืœื“ ื”ื—ื“ืฉ ืฉื ื•ืฆืจ (ื‘ื™ื—ืก ืœืชื”ืœื™ืš ื”ืื‘ ืฉื™ืฆืจ ืื•ืชื•) ืœื ื™ื‘ื•ืฆืข ืขื•ื“, ื”ื—ืœ ืžื”ืคื•ื ืงืฆื™ื” main() . ื™ืฉ ืœื–ื›ื•ืจ ืฉืชื”ืœื™ืš ืฆืืฆื ืื™ื ื• ื”ืขืชืง ืžื“ื•ื™ืง ืฉืœ ืชื”ืœื™ืš ื”ืื‘; ื‘ืคืจื˜, ื™ืฉ ืœื• ืžืจื—ื‘ ื›ืชื•ื‘ื•ืช ืžืฉืœื•, ืื•ื’ืจื™ื ืžืฉืœื•, ืžืฆื‘ื™ืข ืžืฉืœื• ืœื”ื•ืจืื•ืช ื ื™ืชื ื•ืช ืœื”ืคืขืœื” ื•ื›ื“ื•ืžื”. ืœืคื™ื›ืš, ื”ืขืจืš ื”ืžื•ื—ื–ืจ ืœืžืชืงืฉืจ ืฉืœ ื”ืคื•ื ืงืฆื™ื” fork() ื™ื”ื™ื” ืฉื•ื ื”. ื‘ืคืจื˜, ืชื”ืœื™ืš ื”ืื‘ ื™ืงื‘ืœ ืืช ืขืจืš ื”-PID ืฉืœ ืชื”ืœื™ืš ื”ื™ืœื“ ื›ื”ื—ื–ืจื”, ื•ื”ื™ืœื“ ื™ืงื‘ืœ ืขืจืš ื”ืฉื•ื•ื” ืœ-0. ื‘ืืžืฆืขื•ืช ืงื•ื“ื™ ื”ื”ื—ื–ืจื” ื”ืœืœื•, ืชื•ื›ืœ ืœืื—ืจ ืžื›ืŸ ืœื”ืคืจื™ื“ ืชื”ืœื™ื›ื™ื ื•ืœืืœืฅ ื›ืœ ืื—ื“ ืžื”ื ืœืขืฉื•ืช ืืช ื”ืขื‘ื•ื“ื” ืฉืœื•. . ืขื ื–ืืช, ื”ื‘ื™ืฆื•ืข ืฉืœ ืชื•ื›ื ื™ืช ื–ื• ืื™ื ื• ืžื•ื’ื“ืจ ื‘ืงืคื“ื ื•ืช. ืœืื—ืจ ื—ืœื•ืงื” ืœ-2 ืชื”ืœื™ื›ื™ื, ืžืขืจื›ืช ื”ื”ืคืขืœื” ืžืชื—ื™ืœื” ืœื ื˜ืจ ืื•ืชื, ื›ืžื• ื’ื ืœืชื›ื ืŸ ืืช ืขื‘ื•ื“ืชื. ืื ื™ื‘ื•ืฆืข ืขืœ ืžืขื‘ื“ ืœื™ื‘ื” ืื—ืช, ืื—ื“ ื”ืชื”ืœื™ื›ื™ื, ื‘ืžืงืจื” ื–ื” ื”ื”ื•ืจื”, ื™ืžืฉื™ืš ืœืขื‘ื•ื“, ื•ืื– ืชื”ืœื™ืš ื”ืฆืืฆื ื™ืงื‘ืœ ืฉืœื™ื˜ื”. ื‘ืขืช ื”ืคืขืœื” ืžื—ื“ืฉ, ื”ืžืฆื‘ ืขืฉื•ื™ ืœื”ื™ื•ืช ืฉื•ื ื”.

ืฉื™ื—ื” ื”ืžืชืŸ()

ืžืขืจื›ื•ืช ื”ืคืขืœื”: ืฉืœื•ืฉื” ืคื™ืกื•ืช ืงืœื•ืช. ื—ืœืง 3: ืžืžืฉืง API (ืชืจื’ื•ื)

ืฉืงื•ืœ ืืช ื”ืชื•ื›ื ื™ืช ื”ื‘ืื”. ื‘ืชื•ื›ื ื™ืช ื–ื•, ืขืงื‘ ื ื•ื›ื—ื•ืช ืฉื™ื—ื” ืœึทื—ึฒื›ื•ึนืช() ืชื”ืœื™ืš ื”ื”ื•ืจื” ืชืžื™ื“ ื™ืžืชื™ืŸ ืœืกื™ื•ื ืชื”ืœื™ืš ื”ื™ืœื“. ื‘ืžืงืจื” ื–ื”, ื ืงื‘ืœ ืคืœื˜ ื˜ืงืกื˜ ืžื•ื’ื“ืจ ื‘ืงืคื“ื ื•ืช ืขืœ ื”ืžืกืš

ืžืขืจื›ื•ืช ื”ืคืขืœื”: ืฉืœื•ืฉื” ืคื™ืกื•ืช ืงืœื•ืช. ื—ืœืง 3: ืžืžืฉืง API (ืชืจื’ื•ื)

exec() ืงืจื™ืื”

ืžืขืจื›ื•ืช ื”ืคืขืœื”: ืฉืœื•ืฉื” ืคื™ืกื•ืช ืงืœื•ืช. ื—ืœืง 3: ืžืžืฉืง API (ืชืจื’ื•ื)

ืงื—ื• ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืืชื’ืจ exec (). ืงืจื™ืืช ืžืขืจื›ืช ื–ื• ืฉื™ืžื•ืฉื™ืช ื›ืืฉืจ ืื ื• ืจื•ืฆื™ื ืœื”ืคืขื™ืœ ืชื•ื›ื ื™ืช ืฉื•ื ื” ืœื—ืœื•ื˜ื™ืŸ. ื›ืืŸ ื ืชืงืฉืจ execvp() ืœื”ืคืขื™ืœ ืืช ืชื•ื›ื ื™ืช wc ืฉื”ื™ื ืชื•ื›ื ื™ืช ืœืกืคื™ืจืช ืžื™ืœื™ื. ืžื” ืงื•ืจื” ื›ืฉื ืงืจื exec()? ืงืจื™ืื” ื–ื• ืžื•ืขื‘ืจืช ื‘ืฉื ืงื•ื‘ืฅ ื”ื”ืคืขืœื” ื•ื›ืžื” ืคืจืžื˜ืจื™ื ื›ืืจื’ื•ืžื ื˜ื™ื. ืœืื—ืจ ืžื›ืŸ ื ื˜ืขื ื™ื ื”ืงื•ื“ ื•ื”ื ืชื•ื ื™ื ื”ืกื˜ื˜ื™ื™ื ืžืงื•ื‘ืฅ ื”ื”ืคืขืœื” ื”ื–ื” ื•ื”ืงื˜ืข ืฉืœื• ืขื ื”ืงื•ื“ ืžื•ื—ืœืฃ. ืื–ื•ืจื™ ื”ื–ื™ื›ืจื•ืŸ ื”ื ื•ืชืจื™ื, ื›ื’ื•ืŸ ื”ืขืจื™ืžื” ื•ื”ืขืจื™ืžื”, ืžืืชื—ืœื™ื ืžื—ื“ืฉ. ืœืื—ืจ ืžื›ืŸ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืคืฉื•ื˜ ืžืคืขื™ืœื” ืืช ื”ืชื•ื›ื ื™ืช, ื•ืžืขื‘ื™ืจื” ืœื” ืงื‘ื•ืฆื” ืฉืœ ืืจื’ื•ืžื ื˜ื™ื. ืื– ืœื ื™ืฆืจื ื• ืชื”ืœื™ืš ื—ื“ืฉ, ืคืฉื•ื˜ ื”ืคื›ื ื• ืืช ื”ืชื•ื›ื ื™ืช ื”ืคื•ืขืœืช ื›ืขืช ืœืชื•ื›ื ื™ืช ืคื•ืขืœืช ืื—ืจืช. ืœืื—ืจ ื‘ื™ืฆื•ืข ื”ืงืจื™ืื” exec() ื‘ืฆืืฆื, ื ืจืื” ื›ืื™ืœื• ื”ืชื•ื›ื ื™ืช ื”ืžืงื•ืจื™ืช ืœื ืจืฆื” ื›ืœืœ.

ืกื™ื‘ื•ืš ื”ืคืขืœื” ื–ื” ื ื•ืจืžืœื™ ืœื—ืœื•ื˜ื™ืŸ ืขื‘ื•ืจ ืžืขื˜ืคืช ื™ื•ื ื™ืงืก, ื•ืžืืคืฉืจ ืœืžืขื˜ืคืช ื–ื• ืœื‘ืฆืข ืงื•ื“ ืœืื—ืจ ืงืจื™ืื” ืžื–ืœื’(), ืื‘ืœ ืœืคื ื™ ื”ืฉื™ื—ื” exec (). ื“ื•ื’ืžื” ืœืงื•ื“ ื›ื–ื” ืชื”ื™ื” ื”ืชืืžืช ืกื‘ื™ื‘ืช ื”ืžืขื˜ืคืช ืœืฆืจื›ื™ ื”ืชื•ื›ื ื™ืช ื”ืžื•ืคืขืœืช, ืœืคื ื™ ื”ืฉืงืชื”.

ืคึผึธื’ึธื– - ืจืง ืชื•ื›ื ื™ืช ืžืฉืชืžืฉ. ื”ื™ื ืžืจืื” ืœืš ืืช ืฉื•ืจืช ื”ื”ื–ืžื ื” ื•ืžื—ื›ื” ืฉืชื›ืชื•ื‘ ื‘ื• ืžืฉื”ื•. ื‘ืจื•ื‘ ื”ืžืงืจื™ื, ืื ืชื›ืชื•ื‘ ืฉื ืืช ืฉื ื”ืชื•ื›ื ื™ืช, ื”ืžืขื˜ืคืช ืชืžืฆื ืืช ืžื™ืงื•ืžื”, ืชืงืจื ืœืžืชื•ื“ื” fork() ื•ืœืื—ืจ ืžื›ืŸ ืชืงืจื ืกื•ื’ ื›ืœืฉื”ื• ืฉืœ exec() ื›ื“ื™ ืœื™ืฆื•ืจ ืชื”ืœื™ืš ื—ื“ืฉ ื•ืœื—ื›ื•ืช ืœืกื™ื•ืžื• ื‘ืืžืฆืขื•ืช wait() call. ื›ืืฉืจ ืชื”ืœื™ืš ื”ื™ืœื“ ื™ื•ืฆื, ื”ืžืขื˜ืคืช ืชื—ื–ื•ืจ ืžื”ืงืจื™ืื” wait() ื•ืชื“ืคื™ืก ืฉื•ื‘ ืืช ื”ื”ื ื—ื™ื” ื•ืชืžืชื™ืŸ ืœื”ื–ื ืช ื”ืคืงื•ื“ื” ื”ื‘ืื”.

ื”ืคื™ืฆื•ืœ fork() & exec() ืžืืคืฉืจ ืœืžืขื˜ืคืช ืœื‘ืฆืข ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื, ืœืžืฉืœ:
wc file > new_file.

ื‘ื“ื•ื’ืžื” ื–ื•, ื”ืคืœื˜ ืฉืœ ืชื•ื›ื ื™ืช wc ืžื ื•ืชื‘ ืœืงื•ื‘ืฅ. ื”ื“ืจืš ื‘ื” ื”ืžืขื˜ืคืช ืžืฉื™ื’ื” ื–ืืช ื”ื™ื ื“ื™ ืคืฉื•ื˜ื” - ืขืœ ื™ื“ื™ ื™ืฆื™ืจืช ืชื”ืœื™ืš ื™ืœื“ ืœืคื ื™ ื”ื”ืชืงืฉืจื•ืช exec (), ื”ืžืขื˜ืคืช ืกื•ื’ืจืช ืคืœื˜ ืกื˜ื ื“ืจื˜ื™ ื•ืคื•ืชื—ืช ืืช ื”ืงื•ื‘ืฅ ืงื•ื‘ืฅ ื—ื“ืฉ, ืœืคื™ื›ืš, ื›ืœ ื”ืคืœื˜ ืžื”ืชื•ื›ื ื™ืช ื”ืคื•ืขืœืช ื‘ื”ืžืฉืš wc ื™ื•ืคื ื” ืœืงื•ื‘ืฅ ื‘ืžืงื•ื ืœืžืกืš.

ืฆื™ื ื•ืจ ื™ื•ื ื™ืงืก ืžื™ื•ืฉืžื™ื ื‘ืฆื•ืจื” ื“ื•ืžื”, ืขื ื”ื”ื‘ื“ืœ ืฉื”ื ืžืฉืชืžืฉื™ื ื‘-pipe() call. ื‘ืžืงืจื” ื–ื”, ื–ืจื ื”ืคืœื˜ ืฉืœ ื”ืชื”ืœื™ืš ื™ื—ื•ื‘ืจ ืœืชื•ืจ ืฆื™ื ื•ืจ ื”ืžืžื•ืงื ื‘ืงืจื ืœ, ืืœื™ื• ื™ื—ื•ื‘ืจ ื–ืจื ื”ืงืœื˜ ืฉืœ ืชื”ืœื™ืš ืื—ืจ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”