파일에 구조체 자체를 저장하고 나중에 읽어서 사용할때..

superkkt의 이미지

	struct kkt {
		int a;
		char b[128];
		float c;
	} kkt = { 255, "superkkt", 3.1415 };

	fd = open("tempfile", O_RDWR | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
	write(fd, &kkt, sizeof(kkt));

이렇게 구조체 자체를 파일에 저장하고 나중에 불러서 쓰는 방법이 무조건 잘못된 건가요? 책에 보면 이기종간에 이런 방법은 호환성이 없다고 되어 있는데요.. 네트웍 프로그램이 아니라 단일 시스템에서만 작동하는 프로그램의 경우에는 이렇게 구조체 자체를 파일에 기록해도 문제가 없는건가요?

솔라리스의 last 명령어 소스를 보니 wtpmx 파일을 특정 구조체 형태로 읽어들여서 처리를 하더라구요.. 그래서 궁금해서 질문 올립니다~

lifthrasiir의 이미지

superkkt wrote:
	struct kkt {
		int a;
		char b[128];
		float c;
	} kkt = { 255, "superkkt", 3.1415 };

	fd = open("tempfile", O_RDWR | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
	write(fd, &kkt, sizeof(kkt));

이렇게 구조체 자체를 파일에 저장하고 나중에 불러서 쓰는 방법이 무조건 잘못된 건가요? 책에 보면 이기종간에 이런 방법은 호환성이 없다고 되어 있는데요.. 네트웍 프로그램이 아니라 단일 시스템에서만 작동하는 프로그램의 경우에는 이렇게 구조체 자체를 파일에 기록해도 문제가 없는건가요?

솔라리스의 last 명령어 소스를 보니 wtpmx 파일을 특정 구조체 형태로 읽어들여서 처리를 하더라구요.. 그래서 궁금해서 질문 올립니다~

컴파일러에 따라서 구조체를 내부적으로 어떻게 저장하느냐가 달라질 수도 있습니다. (순서는 보존되겠지만 중간에 padding 등이 들어 갈 수 있죠)

- 토끼군

익명 사용자의 이미지

대체로 좋지 않습니다. 컴파일러에 따라서, 컴파일 옵션에 따라서, 컴파일러 버젼에 따라서 결과는 달라질 수 있습니다. 굳이 그런 방법으로 하고 싶으시다면, 해당 컴파일러가 제공하는 #pragma 명령어 등을 이용해서 구조체 사이의 padding을 금지한 다음에 하시는 것이 좋습니다.

체스맨의 이미지

말씀하신 질문은 기본적으로 다음 스레드에서 다루어진 내용과 같습니다.

http://bbs.kldp.org/viewtopic.php?t=65922

Solaris last 명령과 같은 경우는 그 시스템 자체에서 저장하고
읽어들일 뿐 다른 시스템에서 그 파일을 접근할 일이 거의
없을 것이기 때문에 그렇게 할 수 있는 것입니다.

Orion Project : http://orionids.org

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.