# IO.popen raise Errno::EBADF

**URL:** <https://www.ruby-forum.com/t/io-popen-raise-errno-ebadf/58662>\
**Category:** Development\
**Created:** [April 24, 2006, 5:21pm UTC](https://www.ruby-forum.com/t/io-popen-raise-errno-ebadf/58662 "2006-04-24T17:21:41Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ecd19e/32.png) [@SSSBSHS\_SSSSS5SRSmS](https://www.ruby-forum.com/u/SSSBSHS_SSSSS5SRSmS)\
**Post date:** [April 24, 2006, 5:21pm UTC](https://www.ruby-forum.com/t/io-popen-raise-errno-ebadf/58662/1 "2006-04-24T17:21:41Z")

</div>

e$B$H$\_$?$G$9!#e(B

IO.popen() e$B$Ge(B fork e$B$K\<:GT$7$?;~$N%(%i!\<$,e(B EBADF  
e$B$K$J$k$3$H$,$"$j$^$9!#e(B

~% ruby -v  
ruby 1.8.4 (2005-12-24) [i686-linux]  
~% ruby -e ‘"1"_1024_1024\*500; IO.popen(“cat”,“w”)’  
-e:1:in `popen’: Bad file descriptor - cat (Errno::EBADF)  
from -e:1

strace e$B$N7k2L$O$3$s$J46$8!#e(B

25722 pipe([3, 4]) = 0  
25722 clone(child\_stack=0,  
flags=CLONE\_CHILD\_CLEARTID|CLONE\_CHILD\_SETTID|SIGCHLD,  
child\_tidptr=0xb7e1c0c8) = -1 ENOMEM (Cannot allocate memory)  
25722 close(-1081300760) = -1 EBADF (Bad file descriptor)  
25722 close(4) = 0

e$B$H$$$&$3$H$G!"$\*$=$i$/$3$s$J46$8$G$O$J$$$+$H!#e(B

— io.c.orig 2005-12-20 02:11:20.000000000 +0900  
+++ io.c 2006-04-24 23:49:48.000000000 +0900  
@@ -2994,7 +2994,14 @@  
rb\_thread\_sleep(1);  
goto retry;  
}

- 

```
  close(pr[0]); close(pw[1]);

```

- 

```
  if ((modef & FMODE_READABLE)) {

```

- 

```
    close(pr[0]);

```

- 

```
    close(pr[1]);

```

- 

```
  }

```

- 

```
  if ((modef & FMODE_WRITABLE)) {

```

- 

```
    close(pw[0]);

```

- 

```
    close(pw[1]);

```

- 

```
  }
  rb_sys_fail(pname);
  break;
```
