블럭지정했을때 읽는거 어케하는지..

익명 사용자의 이미지

블록을 지정했는데 그거 읽기 위해서 fread 를 사용했는데
세크먼테이션 Fault 만 ..^^;;;
고수님들 블록 지정하고 사용하는 방법 좀..컴파일에는
이상이 없는데 ㅠ.ㅠ

#include
#include
#include
#include

int main(void)
{
int fd,print_data=0;
char buf1[10];
FILE *stream;

struct flock data_lock;
data_lock.l_type = F_RDLCK;
data_lock.l_whence = SEEK_SET;
data_lock.l_start = 0;
data_lock.l_len = 10;

// file open
fd = open("test", O_RDWR);

// file locking
if ( fcntl(fd, F_SETLKW, &data_lock) == -1 )
{
fprintf(stderr, "locking failed");
exit (1);
}

print_data = fread(&fd, sizeof(char), 10, stream);
printf("Locking open data %s\n", print_data);

printf("unlocking\n");

// file unlocking
data_lock.l_type = F_UNLCK;

if ( fcntl(fd, F_SETLKW, &data_lock) == -1 )
{
fprintf(stderr, "unlocking failed");
exit (1);
}

close(fd);

exit(0);
}
~

익명 사용자의 이미지

fopen()으로 했을때는 fread()를 이용하고
open()로 했을때는 read()를 사용하셔야 합니다.
따라서 fread부분이

read (fd, buf1, 10);

이렇게 수정되어야 합니다.

Segmentation fault (core dumped)의 많은 부분이 함수 자체에서보다는
잘못된 String사용에서 발생을 합니다.
님께서 작성하신 소스에도 오류가 있습니다.
일반적으로 printf()는 대부분의 결과물을 그대로 출력을 해줍니다만
숫자값을 문자열로 출력하는데에서도 에러가 발생할 수 있습니다.
즉,

printf ("Locking open data %s\n", print_data);

라는 것은 절대로 잘못된 것입니다.
이유는 print_data는 int형으로 정의를 해 놓았기 때문입니다.
따라서 %s는 %d로 바꾸시던가 의도된 프로그램 코딩에 따라서

printf ("Locking open data %s\n", buf1);

형태가 되어야합니다.

마지막으로 Segmentation fault의 절반 이상이 스트링 관련이라는
것에 주의 하시기 바랍니다.

P.S. 문자열은 마지막이 반드시 '\0'(0x00, NULL)으로 끝나야지만
정확한 읽기 쓰기가 가능합니다.
즉, 읽고자 하는 데이터가 10바이트이라면 버퍼는 11바이트를 할당하고
반드시 bzero (buf1, 11);(or memset (buf1, 0x00, 11);)형태로 버퍼를
clear해준후에 사용하는 것이 정신건강에 도움이 됩니다. ^^;

익명 사용자의 이미지

답변감사드립니다 fopen하구 fread 하구 같이 사용을 하는지는
몰랐습니다 ^^; 아 그런데 블록을 잡고 나서 사용할려고 하는데
이것은 우선적으로 블록을 잡고 그걸 fread로 읽어야만 되는거 아니예요?
블록에 잡힌 내용만 read하구 write을 할려고 하는데 read로 는
안되네요 제가 잘못했는지 조언 부탁드립니다.블록내에서 화일 접근방법
해깔리네요 ^^;

댓글 달기

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