멀티 플랫폼을 위한 파일정장방법

qprk의 이미지

A 라는 프로그램이 있습니다. 이 프로그램은 여러가지 플랫폼에서 동작하도록 컴파일된 바이너리 버전이 있습니다.

이 A 라는 프로그램을 실행하면 a.out 이라는 binary 형태의 결과파일(struct 형태도 있고 string형태도 있습니다.)을 만들어내게 되는데요..

이때 a.out 을 ftp 를 사용하여 다른 플랫폼으로 복사를 한다음 다시 A 프로그램이 읽었을때 아무 지장 없도록 할려면 어떤것을 고려해야 하나요?

즉 윈도우에서 만들어진 a.out 을 aix 나 hpux, linux, solaris 등에서 읽을 수 있도록 하고 싶습니다. 물론 해당 os 에서 32bit 와 64bit cpu 에서 모두 동일하게 읽을 수 있어야 합니다.

우선 고려해야할점중 생각나는것은

byte order : 리틀/빅 인디언
자료형의 크기(int, short, long 등)
struct 형태의 경우 바이트 패딩

정도가 있을거 같은데요..

byte order 는 htonl 등으로 해결하면 될거 같은데요 문제는 32bit 머신과 64bit 머신에서 자료형의 크기를 어떻게 해야 하는가 입니다.

32bit 에서는
short : 2byte
int, long : 4byte
인데 64bit 에서는 어떻게 되는지 모르겠내요..

질문이 상당히 난해하군요 :( 말주변이 없어서요..

한줄요약을 하자면

다양한 플랫폼에서 변형없이 사용가능한 file 저장구조를 만들때 고려해야할 사항 입니다.

익명 사용자의 이미지

1) XML을 사용하시는게 좋고, ASN.1과 같은 형태도 좋습니다.
2) 약식으로, 바이너리형태로 저장하고자 한다면, 프로그래머가 임의의 표준을 정의하고, 프로그램소스에서 자신의 실행환경에 따라 디코딩해나가도록 코딩하시는게 좋겠습니다.
3) 또는 SQLite같은 라이브러리 수준의 DB를 사용하는 방법도 있겠습니다.(2번을 보다 진보시킨 형태로 봐도 무방하겠군요)

shockyhan의 이미지

Quote:
다양한 플랫폼에서 변형없이 사용가능한 file 저장구조를 만들때 고려해야할 사항 입니다.

바이너리 파일은 HDF 형식을 참고해 보세요.

===========================================================================
Shocky Han
BIM Consultant, Certified Information Systems Auditor
Seoul, Korea.
===========================================================================

qprk의 이미지

Anonymous wrote:
1) XML을 사용하시는게 좋고, ASN.1과 같은 형태도 좋습니다.
2) 약식으로, 바이너리형태로 저장하고자 한다면, 프로그래머가 임의의 표준을 정의하고, 프로그램소스에서 자신의 실행환경에 따라 디코딩해나가도록 코딩하시는게 좋겠습니다.
3) 또는 SQLite같은 라이브러리 수준의 DB를 사용하는 방법도 있겠습니다.(2번을 보다 진보시킨 형태로 봐도 무방하겠군요)

우선 감사합니다.

이경우는 파일의 크기가 작을경우는 상관이 없지만 파일 크기가 커지고 (수백MByte) 빈번한 억세스를 해야한다면.. 그리고 속도도 또한 무시할 수 없는 경우라면 어떻게 해야 하는지요?

작은 싸이즈 (수십 KByte 나 수MByte)일 경우는 위의 방법이 아주 유용할것 같습니다.

그러니까

RDB 를 만든다고 생각하고.. 해당 DB 가 만들어 내는 저장파일이 멀티 플랫폼 조건을 만족해야 한다면 이라는 가정이 붙을 경우에는 어떤식으로 하면 좋을까요?

멋진남자...

정태영의 이미지

네트웍을 통해 보내고 받을 때 문제가 없다는 점을 생각해보면... 바이트오더를 네트웍방식으로 해서 저장하면 별 문제가 없지 않을까 싶은데요 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

익명 사용자의 이미지

qprk wrote:

...
RDB 를 만든다고 생각하고.. 해당 DB 가 만들어 내는 저장파일이 멀티 플랫폼 조건을 만족해야 한다면 이라는 가정이 붙을 경우에는 어떤식으로 하면 좋을까요?

SQLite가 딱인듯 싶습니다.
2.6.3이후 버전이라면 말입니다.(멀티플랫폼간의 호환을 위해)
속도도 그럴 듯 했습니다. (사용담 : 대략 1일 2천만 레코드 정도로 예측하고 테스트함)
쿼리 인터페이스도 SQL 92를 준수하는듯( ! ) 하고, 오라클에서 했던 것을 거의 손대지 않고 포팅가능했습니다.
그리고, 라이센스는 GPL도 아닌 free입니다( 심지어, 팔아도 된다는... )
doldori의 이미지

shockyhan wrote:
Quote:
다양한 플랫폼에서 변형없이 사용가능한 file 저장구조를 만들때 고려해야할 사항 입니다.

바이너리 파일은 HDF 형식을 참고해 보세요.

오~ 이거 좋아보이는데요. 저도 포터블한 바이너리 파일 포맷에 대해 관심이 있었는데,
자세히 살펴봐야겠습니다. 링크는 http://hdf.ncsa.uiuc.edu/
qprk의 이미지

아주 유용한 답변들 입니다. 먼저 답해주신 분들깨 감사드립니다.

제 가 질문을 잘못올린것 같습니다.

즉 제가 원하는 내용은 툴이나 그런것이 아니라..

실제로 그런 시스템/라이브러리를 설계/코딩 할때 고려해야할 기술적인 사항입니다.

기존에 잘 만들어진 라이브러리 같은거를 잘 사용하면 됩니다만. 해당 라이브러리를 만들때 고려해야할 사항을 이야기 하는 것 입니다. 또한 라이브러리를 사용할 경우는 범용으로 만들어진 것이라 원하는 속도가 잘 나오지 않더군요 :(

멋진남자...

pynoos의 이미지

Byte order하고 크기에 따른 정렬을 고려해야하고,
struct를 이용하여 접근한다면, 내부 데이터 선언을 정확한 길이를 가진 것으로 만들어주시면 큰 문제는 없습니다.

익명 사용자의 이미지

qprk wrote:

...
실제로 그런 시스템/라이브러리를 설계/코딩 할때 고려해야할 기술적인 사항입니다.
...

XDR 같은 데이터 표현방법에 대한 문서를 참조하시고, endian 및 스토리지의 크기, alignment등이 이슈가 되겠지요.

qprk wrote:

...
기존에 잘 만들어진 라이브러리 같은거를 잘 사용하면 됩니다만. 해당 라이브러리를 만들때 고려해야할 사항을 이야기 하는 것 입니다. 또한 라이브러리를 사용할 경우는 범용으로 만들어진 것이라 원하는 속도가 잘 나오지 않더군요 :(

그러나, 만들다 보면, 점점 살이 붙기 마련이고, 이 플랫폼, 저 플랫폼등등에 맞고 타당하고 안전하게 살붙이다 보면 당연히 귀착되는 결과가 아닐까요? 그 누가 하더라도 말입니다.
과거, dbm시리즈의 변천사는 이러한 부분에 대하여 일종의 사례가 되지 않을까... 합니다.
* 따라서, 역순으로 잘~ 만들어진 라이브러리를 보고 살빼기로 가는 것도 방법이 아닐까 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.