diff --git a/MagickCore/blob.c b/MagickCore/blob.c
index 703b820..aa05f61 100644
--- a/MagickCore/blob.c
+++ b/MagickCore/blob.c
@@ -2775,7 +2775,24 @@
       break;
     case StandardStream:
     {
-      count=(ssize_t) read(fileno(image->blob->file_info.file),q,length);
+      register ssize_t
+        i;
+
+      count=0;
+      for (i=0; i < (ssize_t) length; i+=count)
+      {
+        count=read(fileno(image->blob->file_info.file),q+i,(size_t)
+          MagickMin(length-i,(MagickSizeType) SSIZE_MAX));
+        if (count > 0)
+          continue;
+        count=0;
+        if (errno != EINTR)
+          {
+            i=(-1);
+            break;
+          }
+      }
+      count=i;
       break;
     }
     case FileStream:
@@ -4028,7 +4045,24 @@
       break;
     case StandardStream:
     {
-      count=(ssize_t) write(fileno(image->blob->file_info.file),data,length);
+      register ssize_t
+        i;
+
+      count=0;
+      for (i=0; i < (MagickOffsetType) length; i+=count)
+      {
+        count=write(fileno(image->blob->file_info.file),data+i,(size_t)
+          MagickMin(length-i,(MagickSizeType) SSIZE_MAX));
+        if (count > 0)
+          continue;
+        count=0;
+        if (errno != EINTR)
+          {
+            i=(-1);
+            break;
+          }
+      }
+      count=i;
       break;
     }
     case FileStream: