block | non-block 내부동작

sok1029의 이미지

예를 들어 1에서 write를 100만큼 출력버퍼에 썼다고 하고

2의 입력버퍼의 크기가 50이라고 하고

2에서 read로 최대 100만큼 받는다고 했을 때.

1.block일 경우는 write함수는 언제까지 block되는 건가요? 출력 버퍼에 100만큼 쓸 때까지?

아님 출력버퍼에 100을 입력버퍼가 50이니까 입력버퍼에 2번에 걸쳐 다 전송할때까지?

2.block일 경우 read함수는 언제까지 block되는 건가요? 입력 버퍼에서 100만큼 읽을 동안?

입력버퍼가 50이니까 2번 받을 때까지입니까?

3.만약 위와 같다면 1번이 100씩 전송을 하다가 75만 남은 상황에서 쓰면 출력 버퍼에 75가 들어가면

100이 안되니까 계속 block이 되어야 하는데 리턴되어버리는데.

이런 것은 어떤 내부동작인거죠?(뭐 예를 들어 100을 쓸려고 했는데 더이상 없다는 정보를 받는다라는 가)

read도 마찬가지로 입력버퍼에 받은 내용이 최대로 받을 수 있는 양보다 적어도 받은 양만큼 리턴되는데 어떤 내부동작인지요?

***4**. Non block일경우 write와 read가 리턴되는 시점은 언제인가요?

write가 100을 썼는데 출력버퍼에 100이 들어가지 않아도 리턴 하는 건가요??

만약 그렇게 되었을 경우는 출력버퍼에 70을 썻다고 가정을 하면

입력버퍼에 30을 보내서 read 한번으로 20을 읽었다고 하면.

출력버퍼에 40

입력버퍼에 10

이렇게 남아있는 상태로 있다가 또 다음동작이 write나 read가 오면 큐형식으로 버퍼 뒤쪽에 들어오고 한번읽은 만큼 읽고 하는 건가요??


terzeron의 이미지

1과 2의 관계가 불명확하므로 1번을 답하기는 좀 어렵습니다.
프로세스 1과 프로세스 2가 파이프로 연결되어 있는 것을 가정하는 건가요?

2. 요청한 바이트 수만큼 읽었거나, EOF를 만났거나 할 때까지 block됩니다.
이런 경우에는 50바이트씩 요청해서 두 번 읽으면 되겠네요. 두 번 block되었다가 다 읽어들이면 block이 해제되는 거죠.

3. 정확하게 바이트 수를 지정하지 않으면 다른 영역의 메모리를 보게 됩니다.

4. non blocking mode에서는 함수를 호출하자마자 리턴됩니다. 실제의 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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.