์˜์–ดํ”„๋ž‘์Šค์–ด์ŠคํŽ˜์ธ์–ด

Ad


์˜จ์›์Šค ํŒŒ๋น„์ฝ˜

create-native-map - ํด๋ผ์šฐ๋“œ ์˜จ๋ผ์ธ

Ubuntu Online, Fedora Online, Windows ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” MAC OS ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ํ†ตํ•ด OnWorks ๋ฌด๋ฃŒ ํ˜ธ์ŠคํŒ… ์ œ๊ณต์—…์ฒด์—์„œ create-native-map ์‹คํ–‰

์ด๊ฒƒ์€ Ubuntu Online, Fedora Online, Windows ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋˜๋Š” MAC OS ์˜จ๋ผ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ์›Œํฌ์Šคํ…Œ์ด์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OnWorks ๋ฌด๋ฃŒ ํ˜ธ์ŠคํŒ… ๊ณต๊ธ‰์ž์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” create-native-map ๋ช…๋ น์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ:

์ด๋ฆ„


create-native-map - C/C# ๋งคํ•‘ ์ž‘์„ฑ๊ธฐ

๊ฐœ์š”


๋„ค์ดํ‹ฐ๋ธŒ ๋งต ๋งŒ๋“ค๊ธฐ [์˜ต์…˜]* ์–ด์…ˆ๋ธ”๋ฆฌ-ํŒŒ์ผ-์ด๋ฆ„ ์ถœ๋ ฅ-์ ‘๋‘์‚ฌ

์˜ต์…˜


--autoconf-ํ—ค๋”=ํ—ค๋”
๋จธ๋ฆฌ๊ธ€ ์ผ๋ฐ˜์ ์œผ๋กœ C์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ๋ฌธ์˜ ํ—ค๋” ํŒŒ์ผ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. #ํฌํ•จ
์ง„์ˆ , ์˜ˆ #ํฌํ•จ or #ํฌํ•จ "local.h" .

ํฌํ•จ ์ด๋ฆ„์—์„œ Autoconf ํ˜•์‹์˜ ๋งคํฌ๋กœ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  #ํฌํ•จ
์ง€์‹œ๋ฌธ์€ #ifdef ๋‚ด Autoconf ๋งคํฌ๋กœ์— ๋Œ€ํ•œ ๋ธ”๋ก
์ƒ์„ฑ .c ํŒŒ์ผ.

์˜ˆ๋ฅผ ๋“ค์–ด, --autoconf-ํ—ค๋”= ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

#ifndef HAVE_STDIO_H
#ํฌํ•จํ•˜๋‹ค
#endif /* ndef HAVE_STDIO_H */

--autoconf-๊ตฌ์„ฑ์›=๊ตฌ์„ฑ์›
์— ๋Œ€ํ•œ ๋ชจ๋“  ์•ก์„ธ์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํšŒ์› ์•ˆ์— ์‹ธ์•ผํ•ฉ๋‹ˆ๋‹ค #ifdef HAVE_MEMBER
๋ธ”๋ก. ํšŒ์› ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์•ผ ๋ช… ๋˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„ . ๋ถ„์•ผ ๋ช…
์ฝค๋น„๋„ค์ด์…˜.

์˜ˆ๋ฅผ ๋“ค์–ด C# ์„ ์–ธ์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ:

[Mono.Unix.Native.Map ("struct dirent")]
๊ตฌ์กฐ์ฒด ๋””๋ ŒํŠธ {
๊ณต๊ฐœ ๊ธด d_off;
}

๊ทธ๋•Œ --autoconf-๊ตฌ์„ฑ์›=d_off ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

INT
ToDirent(struct dirent *from, struct Dirent *to)
{
#ifdef HAVE_STRUCT_DIRENT_D_OFF
to->d_off = from->d_off;
#endif /* ndef HAVE_STRUCT_DIRENT_D_OFF */
}

--์ œ์™ธ-๋„ค์ดํ‹ฐ๋ธŒ-์‹ฌ๋ณผ=SYMBOL
SYMBOL ํ•˜๋Š” [Dll๊ฐ€์ ธ์˜ค๊ธฐ] -ํ‘œ์‹œํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ง€์› ํ”„๋กœํ† ํƒ€์ž…์„ ์ƒ์„ฑํ•˜๋‹ค
๊ทธ๊ฒƒ์„ ์œ„ํ•ด.

--impl-ํ—ค๋”=ํ—ค๋”
์‚ฝ์ž… #ํฌํ•จ ์ƒ์„ฑ๋œ ๋ฌธ .c ~์„์œ„ํ•œ ํŒŒ์ผ ๋จธ๋ฆฌ๊ธ€ .

์˜ˆ๋ฅผ ๋“ค์–ด, --impl-ํ—ค๋”= ์ƒ์„ฑ

#ํฌํ•จ

--impl-macro=๋งคํฌ๋กœ
์‚ฝ์ž… #๋ฐํžˆ๋‹ค ์ƒ์„ฑ๋œ ๋ฌธ .c ํŒŒ์ผ. MACRO ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค = ์—
๋งคํฌ๋กœ ์ด๋ฆ„๊ณผ ๋งคํฌ๋กœ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ๋ฅผ ๋“ค์–ด, --impl-๋งคํฌ๋กœ=FOO=42 ์ƒ์„ฑ

#FOO 42 ์ •์˜

--๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ=๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
ํ”„๋กœํ† ํƒ€์ž… ๋งŒ๋“ค๊ธฐ [Dll๊ฐ€์ ธ์˜ค๊ธฐ] -๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ‘œ์‹œ๋œ ๋ฉ”์„œ๋“œ
๋„์„œ๊ด€ ๋„์„œ๊ด€ ์ƒ์„ฑ๋œ .h ํŒŒ์ผ.

--๊ณต๊ฐœ ํ—ค๋”=ํ—ค๋”
์‚ฝ์ž… #ํฌํ•จ ์ƒ์„ฑ๋œ ๋ฌธ .h ~์„์œ„ํ•œ ํŒŒ์ผ ๋จธ๋ฆฌ๊ธ€ .

์˜ˆ๋ฅผ ๋“ค์–ด, --๊ณต๊ฐœ ํ—ค๋”= ์ƒ์„ฑ

#ํฌํ•จ

--๊ณต๊ณต-๋งคํฌ๋กœ=๋งคํฌ๋กœ
์‚ฝ์ž… #๋ฐํžˆ๋‹ค ์ƒ์„ฑ๋œ ๋ฌธ .h ํŒŒ์ผ. MACRO ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค = ์—
๋งคํฌ๋กœ ์ด๋ฆ„๊ณผ ๋งคํฌ๋กœ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ๋ฅผ ๋“ค์–ด, --๊ณต๊ณต-๋งคํฌ๋กœ=FOO=42 ์ƒ์„ฑ

#FOO 42 ์ •์˜

--์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ-๋ฉค๋ฒ„=FROM=TO
์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. FROM C ๋งคํฌ๋กœ์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ œ์ •์‹ ์œผ๋กœ. ๊ด€๋ฆฌ ํ‘œํ˜„์— ๋Œ€ํ•ด ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ฐธ์กฐ๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ~๊นŒ์ง€ ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๋ฏธ๊ตญ ์—ฌํ–‰์ž
of FROM .

์˜ˆ๋ฅผ ๋“ค์–ด C# ์„ ์–ธ์ด ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ:

[Mono.Unix.Native.Map ("๊ตฌ์กฐ ํ†ต๊ณ„")]
๊ตฌ์กฐ์ฒด ํ†ต๊ณ„ {
๊ณต๊ฐœ ๊ธด st_atime;
}

๊ทธ๋ฆฌ๊ณ  ์ธ์ˆ˜ --rename-member=st_atime=st_atime_ , ์ƒ์„ฑ๋œ .h ํŒŒ์ผ์€
์žˆ๋‹ค:

๊ตฌ์กฐ์ฒด ํ†ต๊ณ„ {
gint64 st_atime_;
};

(๋ณ€๊ฒฝ๋œ ํ•„๋“œ ์ด๋ฆ„ ์ฐธ๊ณ ) ์ƒ์„ฑ๋˜๋Š” ๋™์•ˆ .c ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ToStat(๊ตฌ์กฐ ํ†ต๊ณ„ *from, ๊ตฌ์กฐ ํ†ต๊ณ„ *to)
{
to->st_atime_ = from->st_atime;
}

--์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ-๋„ค์ž„์ŠคํŽ˜์ด์Šค=FROM=TO
๊ธฐ๋ณธ์ ์œผ๋กœ C "๋„ค์ž„์ŠคํŽ˜์ด์Šค"(๊ธฐํ˜ธ ์ ‘๋‘์‚ฌ)๋Š” C# ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๋‚ด์˜ ์œ ํ˜•
C# ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ชจ๋…ธ.์œ ๋‹‰์Šค.๋„ค์ดํ‹ฐ๋ธŒ C "๋„ค์ž„์ŠคํŽ˜์ด์Šค"์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Mono_Unix_Native . ์‚ฌ์šฉ
--์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ-๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ๋ณธ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด --์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ-
๋„ค์ž„์ŠคํŽ˜์ด์Šค=Mono.Unix.Native=Mono_Posix .

๊ธฐ์ˆ 


๋„ค์ดํ‹ฐ๋ธŒ ๋งต ๋งŒ๋“ค๊ธฐ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
C# ์œ ํ˜•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋กœ ๋™๊ธฐํ™”๋œ C์™€ C# ๊ฐ„์— ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

Platform Invoke๋Š” ๊ด€๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ํ”Œ๋žซํผ์˜ ์ •ํ™•ํ•œ ์œ ํ˜•๊ณผ ๋ ˆ์ด์•„์›ƒ์„ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉํ•˜๋Š” ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ๊ตฌ์กฐ. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Windows์˜ ๊ฒฝ์šฐ์ด์ง€๋งŒ ์ง€์› ๊ฒฝ์šฐ
์œ ๋‹‰์Šค์—์„œ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ตฌ์กฐ์ฒด ์Šคํƒฏ ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ์œ ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํ”Œ๋žซํผ์—์„œ ํ”Œ๋žซํผ์œผ๋กœ(๋˜๋Š” ์ •์˜๋œ ์ปดํŒŒ์ผ๋Ÿฌ ๋งคํฌ๋กœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ!). ์˜ˆ๋ฅผ ๋“ค์–ด, off_t
์ผ๋ฐ˜์ ์œผ๋กœ ILP32 ํ”Œ๋žซํผ์—์„œ๋Š” ๋ถ€ํ˜ธ ์žˆ๋Š” 32๋น„ํŠธ ์ •์ˆ˜์ด์ง€๋งŒ ๋ถ€ํ˜ธ ์žˆ๋Š” 64๋น„ํŠธ ์ •์ˆ˜์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
LP64 ํ”Œ๋žซํผ์—์„œ๋Š” ์ด์ง€๋งŒ ILP64 ํ”Œ๋žซํผ์—์„œ๋Š” 32๋น„ํŠธ ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
_FILE_OFFSET_BITS ๋งคํฌ๋กœ์˜ ๊ฐ’์€ 64์ž…๋‹ˆ๋‹ค. ์š”์ปจ๋Œ€ ๋ชจ๋“  ๊ฒƒ์ด Unix ๋‚ด์—์„œ ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค.
๊ด€๋ฆฌ ์ฝ”๋“œ๋Š” ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ‹ˆ์ƒˆ ์‹œ์žฅ ๋„ค์ดํ‹ฐ๋ธŒ ๋งต ๋งŒ๋“ค๊ธฐ : ๊ด€๋ฆฌ ์ฝ”๋“œ๊ฐ€ ํƒ€๊ฒŸํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์ • ABI๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ด€๋ฆฌ๋˜๋Š” ํ‘œํ˜„์„ ํ•ด๋‹น ๋„ค์ดํ‹ฐ๋ธŒ์— "์ฝํฌ"ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
ํ‘œํ˜„. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ํ”Œ๋žซํผ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ
์—ด๊ฑฐํ˜• ๊ฐ’( ์‹œ๊ทธ๋ฒ„์Šค FreeBSD์—์„œ๋Š” ๊ฐ’์ด 10์ด์ง€๋งŒ FreeBSD์—์„œ๋Š” 7์ž…๋‹ˆ๋‹ค.
Linux) ๊ตฌ์„ฑ์›์„ ๊ตฌ์กฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด(์–ผ๋งˆ๋‚˜ ํฐ off_t ?).

๋„ค์ดํ‹ฐ๋ธŒ ๋งต ๋งŒ๋“ค๊ธฐ ๊ฒ€์‚ฌ ํ•  ๊ฒƒ์ด๋‹ค ์–ด์…ˆ๋ธ”๋ฆฌ-ํŒŒ์ผ-์ด๋ฆ„ ๋‹ค์Œ ํŒŒ์ผ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ ์ ‘๋‘์‚ฌ.h
์—ด๊ฑฐํ˜• ๊ฐ’, ํด๋ž˜์Šค ๋ฐ ๊ตฌ์กฐ์ฒด ์„ ์–ธ, ์œ„์ž„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
์„ ์–ธ ๋ฐ [Dll๊ฐ€์ ธ์˜ค๊ธฐ] -ํ‘œ์‹œ๋œ ๋ฉ”์„œ๋“œ(๋‹ค์Œ์— ์˜ํ•ด ์ง€์ •๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ
--๋„์„œ๊ด€ ) ์–ด์…ˆ๋ธ”๋ฆฌ ๋‚ด ์–ด์…ˆ๋ธ”๋ฆฌ-ํŒŒ์ผ-์ด๋ฆ„ .

์ถœ๋ ฅ์ ‘๋‘์‚ฌ.c
์—ด๊ฑฐ ๋ฐ ๊ตฌ์กฐ ๋ณ€ํ™˜์˜ ๊ตฌํ˜„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ.

์ถœ๋ ฅ ์ ‘๋‘์‚ฌ.cs
๋ถ€๋ถ„ ํด๋ž˜์Šค ํฌํ•จ NativeConvert ํฌํ•จํ•˜๋Š” ์—ด๊ฑฐ ๋ฒˆ์—ญ
๋ฐฉ๋ฒ•.

์ถœ๋ ฅ ์ ‘๋‘์‚ฌ.xml
์—ด๊ฑฐ ๋ณ€ํ™˜์„ ์œ„ํ•œ ECMA XML ๋ฌธ์„œ ์Šคํ…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋ฐฉ๋ฒ• ์ถœ๋ ฅ ์ ‘๋‘์‚ฌ.cs .

๋„ค์ดํ‹ฐ๋ธŒ ๋งต ๋งŒ๋“ค๊ธฐ ์ฃผ๋กœ ์ฐพ๋Š”๋‹ค ์ง€๋„ ์†์„ฑ -์žฅ์‹๋œ ์œ ํ˜•์ด๋ฉฐ ๋‘ ๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ง€๋„ ์†์„ฑ ์†์„ฑ :

๋„ค์ดํ‹ฐ๋ธŒ ์œ ํ˜•
ํ•ด๋‹น C ์œ ํ˜•์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค์— ์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ตฌ์กฐ ๋ฐ ํ•„๋“œ.

์–ต์ œํ”Œ๋ž˜๊ทธ
์˜ ์—ด๊ฑฐํ˜• ๋ฉค๋ฒ„์— ์ง€์ •๋œ ๊ฒฝ์šฐ [ํ”Œ๋ž˜๊ทธ] -์žฅ์‹๋œ ์—ด๊ฑฐ
์œ ํ˜•, ํ•ด์ œ ๋น„ํŠธ ๋งˆ์Šคํ‚น ์—ด๊ฑฐ๋ฅผ ์œ„ํ•œ ์ผ๋ฐ˜ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ ์ง€์›
์œ ํ˜•.

์ด๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ ๋ฐ ๋น„ํŠธ๋งˆ์Šคํฌ๊ฐ€ ์•„๋‹Œ ์ •๋ณด๊ฐ€
๋™์ผํ•œ ์œ ํ˜•์ด๋ฉฐ ๋น„ํŠธ๋งˆ์Šคํฌ ๊ฒ€์‚ฌ๋Š” ๋น„ํŠธ๋งˆ์Šคํฌ๊ฐ€ ์•„๋‹Œ ํ•ญ๋ชฉ์— ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
๊ฐ€์น˜. ์˜ˆ: Mono.Unix.Native.FilePermissions.S_IFREG , ์ด๋Š”
๋น„ํŠธ๋งˆ์Šคํฌ ๊ฐ’, ๋ฐ˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ์ผ๊ถŒํ•œ ๋น„ํŠธ๋งˆ์Šคํฌ ๊ฐ’(
ํŒŒ์ผ๊ถŒํ•œ.S_IRUSR , ํŒŒ์ผ๊ถŒํ•œ.S_IWUSR ๋“ฑ).

XNUMXD๋ดํƒˆ์˜ ์ง€๋„ ์†์„ฑ ํŠน์„ฑ์€ ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ๋Œ€๋ฆฌ์ž, ํ•„๋“œ ๋ฐ
์—ด๊ฑฐ.

๋Œ€ํ‘œ์ž๋“ค
๋Œ€๋ฆฌ์ž๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ์€ ๋‹ค์Œ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. MapAttribute.NativeType ์žฌ์‚ฐ ๋ฐ
ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑ ํ˜•์‹ ์ •์˜ ๋Œ€๋ฆฌ์ž ์„ ์–ธ๊ณผ ๊ฐ€์žฅ ์ผ์น˜ํ•˜๋Š”
๋กœ .h ํŒŒ์ผ.

์˜ˆ๋ฅผ ๋“ค์–ด,

๋„ค์ž„์ŠคํŽ˜์ด์Šค Foo {
[์ง€๋„]
์œ„์ž„ ๋ฌธ์ž์—ด MyCallback(๋ฌธ์ž์—ด s);
}

์ƒ์„ฑ ํ˜•์‹ ์ •์˜ :

typedef char* (*Foo_MyCallback) (const char *s);

ํด๋ž˜์Šค ๋ฐ ๊ตฌ์กฐ
A [์ง€๋„] -์žฅ์‹๋œ ํด๋ž˜์Šค ๋˜๋Š” ๊ตฌ์กฐ๋Š” C ๊ตฌ์กฐ ์„ ์–ธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
.h ํŒŒ์ผ :

[์ง€๋„]
๊ตฌ์กฐ์ฒด ํ‘ธ {
๊ณต๊ณต ์ •์ˆ˜ i;
}

๋œ๋‹ค

๊ตฌ์กฐ์ฒด ํ‘ธ {
๊ณต๊ณต ์ •์ˆ˜ i;
};

๊ฒฝ์šฐ MapAttribute.NativeType ์†์„ฑ์ด ์„ค์ •๋˜๋ฉด ๋ณ€ํ™˜ ํ•จ์ˆ˜๊ฐ€
์ด๋‚ด์— ์„ ์–ธ .h ํŒŒ์ผ ๋‚ด์—์„œ ์ƒ์„ฑ .c ํŒŒ์ผ :

๋„ค์ž„์ŠคํŽ˜์ด์Šค Foo {
[์ง€๋„("๊ตฌ์กฐ ํ†ต๊ณ„")]
๊ตฌ์กฐ์ฒด ํ†ต๊ณ„ {
๊ณต๊ฐœ ๋‹จ์œ„ st_uid;
}
}

๋œ๋‹ค

/* .h ํŒŒ์ผ */
๊ตฌ์กฐ์ฒด Foo_Stat {
๋ถ€ํ˜ธ ์—†๋Š” int st_uid;
};
INT
Foo_FromStat(struct Foo_Stat *from, struct stat *to);
INT
Foo_ToStat(struct stat *to, sxtruct Foo_Stat *to);

/* .c ํŒŒ์ผ */
INT
Foo_FromStat(struct Foo_Stat *from, ๊ตฌ์กฐ์ฒด stat *to)
{
memset(to, 0, sizeof(*to);
to->st_uid = from->st_uid;
0๊ฐ€ ๋Œ์•„;
}

INT
Foo_ToStat(struct stat *to, sxtruct Foo_Stat *to)
{
memset(to, 0, sizeof(*to);
to->st_uid = from->st_uid;
0๊ฐ€ ๋Œ์•„;
}

ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ๋ณ€ํ™˜ ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ํ•„๋“œ๋งŒ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ์ž์ฒด. ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ํ•„๋“œ๋Š” ๋ณต์‚ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์ด ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค
๋„ค์ดํ‹ฐ๋ธŒ ๋งต ๋งŒ๋“ค๊ธฐ ์ƒ์†์ด C์—์„œ ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ
์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ํ•„๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋ณ€ํ™˜ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋งก๊ฒจ์ง‘๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ.)

ํ•„๋“œ ํ•„๋“œ(1)์— ์ง€๋„ ์†์„ฑ ์†์„ฑ์ด๊ณ  (2)๋Š”
MapAttribute.NativeType ์†์„ฑ์ด ์„ค์ •๋˜๋ฉด ์ง€์ •๋œ ๊ธฐ๋ณธ ์œ ํ˜•์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์˜ค๋ฒ„ํ”Œ๋กœ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด:

๋„ค์ž„์ŠคํŽ˜์ด์Šค Foo {
[์ง€๋„("๊ตฌ์กฐ ํ†ต๊ณ„")]
๊ตฌ์กฐ์ฒด ํ†ต๊ณ„ {
[Map ("off_t")] public long st_size;
}
}

์ƒ์„ฑ

/* .h ํŒŒ์ผ */
๊ตฌ์กฐ์ฒด Foo_Stat {
gint64 st_size;
};
INT
Foo_FromStat(struct Foo_Stat *from, struct stat *to);
INT
Foo_ToStat(struct stat *to, sxtruct Foo_Stat *to);

/* .c ํŒŒ์ผ */
INT
Foo_FromStat(struct Foo_Stat *from, ๊ตฌ์กฐ์ฒด stat *to)
{
_cnm_return_val_if_overflow(off_t, from->st_size, -1);

memset(to, 0, sizeof(*to);
to->st_size = from->st_size;
0๊ฐ€ ๋Œ์•„;
}

INT
Foo_ToStat(struct stat *to, sxtruct Foo_Stat *to)
{
_cnm_return_val_if_overflow(gint64, from->st_size, -1);

memset(to, 0, sizeof(*to);
to->st_size = from->st_size;
0๊ฐ€ ๋Œ์•„;
}

์ด๊ฒƒ์€ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ ๋‚ด์—์„œ ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
MapAttribute.NativeType ๋ฌด์—‡์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ์œ ํ˜•์€ (์‹œ์Šคํ…œ ํ—ค๋” ํŒŒ์ผ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ์•Š๊ณ ...)์ž…๋‹ˆ๋‹ค.

์—ด๊ฑฐ
C ์—ด๊ฑฐํ˜•๊ณผ ๊ฐ ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ๋งคํฌ๋กœ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์—ด๊ฑฐ. ์— ๋ฐ ~ ํ•จ์ˆ˜๋Š” ๋˜ํ•œ .h ํŒŒ์ผ ๋ฐ
์—์„œ ๊ตฌํ˜„ .c ํŒŒ์ผ.

์˜ˆ๋ฅผ ๋“ค์–ด,

๋„ค์ž„์ŠคํŽ˜์ด์Šค Foo {
[์ง€๋„]
์—ด๊ฑฐํ˜• Errno {
์—์ธ๋ฐœ
}
}

์—์„œ ๋‹ค์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. .h ํŒŒ์ผ :

์—ด๊ฑฐํ˜• Foo_Errno {
Foo_Errno_EINVAL = 0,
#define Foo_Errno_EINVAL Foo_Errno_EINVAL
};
int Foo_FromErrno(int from, int *to);
int Foo_ToErrno(int from, int *to);

์—์„œ ๋‹ค์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. .c ํŒŒ์ผ :

INT
Foo_FromErrno(int from, int *to)
{
*์— = 0;
if (== Foo_Errno_EPERM์—์„œ)
#ifdef EINVAL
{*์— = EINVAL;}
#๊ทธ๋ฐ–์—
{errno = EINVAL; -1 ๋ฐ˜ํ™˜;}
#endif
0๊ฐ€ ๋Œ์•„;
}

INT
Foo_ToErrno(int from, int *to)
{
*์— = 0;
#ifdef EINVAL
if (== EINVAL์—์„œ)
{*to = Foo_Errno_EPERM; 0 ๋ฐ˜ํ™˜;}
#endif
๋ฐ˜ํ™˜ -1;
}

๊ด€๋ฆฌ๋˜๋Š” ์—ด๊ฑฐํ˜•์ด [ํ”Œ๋ž˜๊ทธ] -ํ›Œ๋ฅญํ•˜๊ฒŒ ๊พธ๋ฏผ
์—ด๊ฑฐํ˜•(๋น„ํŠธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด)์ด์ง€๋งŒ ์ด๊ฒƒ์ด ๊ธฐ๋ณธ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

๋ฉ”์ผ๋ง ๊ธฐ์šธ๊ธฐ


๋ฐฉ๋ฌธ http://lists.ximian.com/mailman/listinfo/mono-devel-list ์ž์„ธํ•œ ๋‚ด์šฉ์€.

WEB ๋Œ€์ง€


๋ฐฉ๋ฌธ http://www.mono-project.com ์ž์„ธํ•œ ๋‚ด์šฉ์€

๋„ค์ดํ‹ฐ๋ธŒ ๋งต ๋งŒ๋“ค๊ธฐ(1)

onworks.net ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜จ๋ผ์ธ์—์„œ create-native-map ์‚ฌ์šฉ


๋ฌด๋ฃŒ ์„œ๋ฒ„ ๋ฐ ์›Œํฌ์Šคํ…Œ์ด์…˜

Windows ๋ฐ Linux ์•ฑ ๋‹ค์šด๋กœ๋“œ

  • 1
    ํ†ต์Œ
    ํ†ต์Œ
    SWIG๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    C๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ๊ณผ
    ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ์ˆ˜์ค€์˜ C++
    ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด. SWIG๋Š” ๋‹ค์Œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    ๋‹ค๋ฅธ...
    SWIG ๋‹ค์šด๋กœ๋“œ
  • 2
    WooCommerce Nextjs ๋ฐ˜์‘ ํ…Œ๋งˆ
    WooCommerce Nextjs ๋ฐ˜์‘ ํ…Œ๋งˆ
    React WooCommerce ํ…Œ๋งˆ,
    ๋‹ค์Œ JS, Webpack, Babel, Node ๋ฐ
    GraphQL ๋ฐ Apollo๋ฅผ ์‚ฌ์šฉํ•œ Express
    ๊ณ ๊ฐ. React์˜ WooCommerce ์Šคํ† ์–ด(
    ํฌํ•จ: ์ œํ’ˆ...
    WooCommerce Nextjs ๋ฐ˜์‘ ํ…Œ๋งˆ ๋‹ค์šด๋กœ๋“œ
  • 3
    Archlabs_repo
    Archlabs_repo
    ArchLabs์šฉ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ์ด๊ฒƒ์€
    ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ
    ์—
    https://sourceforge.net/projects/archlabs-repo/.
    ๊ทธ๊ฒƒ์€ OnWorks์—์„œ ํ˜ธ์ŠคํŒ…๋˜์—ˆ์Šต๋‹ˆ๋‹ค ...
    archlabs_repo ๋‹ค์šด๋กœ๋“œ
  • 4
    ์ œํผ ํ”„๋กœ์ ํŠธ
    ์ œํผ ํ”„๋กœ์ ํŠธ
    Zephyr ํ”„๋กœ์ ํŠธ๋Š” ์ƒˆ๋กœ์šด ์„ธ๋Œ€์ž…๋‹ˆ๋‹ค.
    ์‹ค์‹œ๊ฐ„ ์šด์˜์ฒด์ œ(RTOS)
    ์—ฌ๋Ÿฌ ํ•˜๋“œ์›จ์–ด ์ง€์›
    ์•„ํ‚คํ…์ฒ˜. ๊ทธ๊ฒƒ์€
    ์ž‘์€ ํฌ๊ธฐ์˜ ์ปค๋„...
    Zephyr ํ”„๋กœ์ ํŠธ ๋‹ค์šด๋กœ๋“œ
  • 5
    SC์ฝ˜
    SC์ฝ˜
    SCons๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์ถ• ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    ๊ทธ๊ฒƒ์€์— ๋Œ€ํ•œ ์šฐ์ˆ˜ํ•œ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค
    ๊ณ ์ „์ ์ธ "๋งŒ๋“ค๊ธฐ" ๋นŒ๋“œ ๋„๊ตฌ
    ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ์•Œ๊ณ  ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค. ์Šค์ฝ˜์€
    ๊ตฌํ˜„ ...
    SCons ๋‹ค์šด๋กœ๋“œ
  • 6
    PSeInt
    PSeInt
    PSeInt๋Š” ์˜์‚ฌ ์ฝ”๋“œ ํ•ด์„๊ธฐ์ž…๋‹ˆ๋‹ค.
    ์ŠคํŽ˜์ธ์–ด๋ฅผ ๊ตฌ์‚ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•™์ƒ.
    ์ฃผ์š” ๋ชฉ์ ์€ ๋‹ค์Œ์„ ์œ„ํ•œ ๋„๊ตฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    ๊ธฐ๋ณธ์„ ๋ฐฐ์šฐ๊ณ  ์ดํ•ดํ•˜๊ธฐ
    ๊ฐœ๋…...
    PSeInt ๋‹ค์šด๋กœ๋“œ
  • ๋”ยป

Linux ๋ช…๋ น

Ad