여러개의 프로세스가 하나의 파일을 건드릴 때..

litwind의 이미지

프로그램을 짜다 보니 여러개의 프로세스가

한 파일을 건드리게 즉, fopen 해서 읽고 쓰고 하게 되었습니다.

문제는 한 프로세스가 쓸때 다른 놈이 못 읽게..

해야 되는데.. 어떻게 해야 할지.

라이브러리 등으로 제공되는 세마포어 라든가..

뭐 그런 거 없나요? ^^;

cjh의 이미지

flock()이나 lockf() 함수를 이용하시면 됩니다.

--
익스펙토 페트로눔

lovehis의 이미지

조심 하세요

partout의 이미지

lockf나 flock을 써서 할 수도 있지만... 그리 범용적인 방법은 아닙니다.

fcntl을 써서 구현하는 편이 더 좋을 거 같네요.
아래는 fcntl 함수의 프로토타입인데...

int fcntl(int filedes, int cmd, ... );

record locking을 구현하기 위해서...
cmd에 F_GETLK, F_SETLK, F_SETLKW 를 사용할 수 있습니다.

자세한 내용은 Stevens가 지은 'Advanced Programming in the Unix Environment' 책의 '12.3 Record Locking을' 참조하세요.

어찌나 졸린지..~~

shshin의 이미지

죄송한데요...fcntl 하구 close(fd) 는 원자성 오퍼레이션(atomic operation)
을 가진다고 하는데요..

제가 아둔하여 그 의미가 이해가 되질 않습니다.. :cry:

반드시 한번에 처리되어야 하는 작업이라는 건데..

설명이 잘 이해가 되지 않습니다.

좀 가르쳐 주세요...ㅠ.ㅠ.. lock 을 한다는 건지..어떤건지...ㅠ.ㅠ...

vigor96의 이미지

원자적이라는 의미는

처리 중에 다른 프로세스나 쓰레드가 끼어 들 수 없다는 소리입니다.

즉 fcntl 이 실행되는 도중에 어떤 프로세스가 그 실행도중에

끼어 들 수 없다는 얘기입니다.~

하나의 처리 단위로 보장해 준다는 소리죠....

litwind의 이미지

여러분들의 조언 감사합니다.

그런데, flock 이나 fcntl 등을 이용해서
락을 걸면 다른 프로세스는 락이 풀리기를 기다리나요?
아님.. 에러 메세지를 표시 하고 리턴 되나요?

무엇이 더 필요하단 말인가...

pynoos의 이미지

F_SETLK, F_SETLKW

man page를 잘 읽어 보시면...

두 개가 다른 것임을 알 수 있을 것입니다. 뒤에것이 lock이 존재할 경우 wait 하는 버전이죠.

댓글 달기

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