์ด๊ฒ์ 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 ์ฌ์ฉ