diff --git a/System/Process.hsc b/System/Process.hsc
--- a/System/Process.hsc
+++ b/System/Process.hsc
@@ -57,6 +57,7 @@
 
     -- Interprocess communication
     createPipe,
+    createPipeFd,
 
     -- * Old deprecated functions
     -- | These functions pre-date 'createProcess' which is much more
diff --git a/System/Process/Internals.hs b/System/Process/Internals.hs
--- a/System/Process/Internals.hs
+++ b/System/Process/Internals.hs
@@ -38,6 +38,7 @@
     withFilePathException, withCEnvironment,
     translate,
     createPipe,
+    createPipeFd,
     interruptProcessGroupOf,
     ) where
 
@@ -45,6 +46,7 @@
 import System.IO
 
 import GHC.IO.Handle.FD (fdToHandle)
+import System.Posix.Internals (FD)
 
 import System.Process.Common
 
@@ -162,6 +164,17 @@
 createPipe :: IO (Handle, Handle)
 createPipe = createPipeInternal
 {-# INLINE createPipe #-}
+
+-- ---------------------------------------------------------------------------
+-- createPipeFd
+
+-- | Create a pipe for interprocess communication and return a
+-- @(readEnd, writeEnd)@ `FD` pair.
+--
+-- @since 1.4.2.0
+createPipeFd :: IO (FD, FD)
+createPipeFd = createPipeInternalFd
+{-# INLINE createPipeFd #-}
 
 
 -- ----------------------------------------------------------------------------
diff --git a/System/Process/Posix.hs b/System/Process/Posix.hs
--- a/System/Process/Posix.hs
+++ b/System/Process/Posix.hs
@@ -15,6 +15,7 @@
     , c_execvpe
     , pPrPr_disableITimers
     , createPipeInternal
+    , createPipeInternalFd
     , interruptProcessGroupOfInternal
     ) where
 
@@ -278,6 +279,11 @@
     readh <- Posix.fdToHandle readfd
     writeh <- Posix.fdToHandle writefd
     return (readh, writeh)
+
+createPipeInternalFd :: IO (FD, FD)
+createPipeInternalFd = do
+   (Fd readfd, Fd writefd) <- Posix.createPipe
+   return (readfd, writefd)
 
 interruptProcessGroupOfInternal
     :: ProcessHandle    -- ^ A process in the process group
diff --git a/System/Process/Windows.hsc b/System/Process/Windows.hsc
--- a/System/Process/Windows.hsc
+++ b/System/Process/Windows.hsc
@@ -10,6 +10,7 @@
     , stopDelegateControlC
     , isDefaultSignal
     , createPipeInternal
+    , createPipeInternalFd
     , interruptProcessGroupOfInternal
     ) where
 
@@ -244,14 +245,19 @@
 
 createPipeInternal :: IO (Handle, Handle)
 createPipeInternal = do
-    (readfd, writefd) <- allocaArray 2 $ \ pfds -> do
+    (readfd, writefd) <- createPipeInternalFd
+    (do readh <- fdToHandle readfd
+        writeh <- fdToHandle writefd
+        return (readh, writeh)) `onException` (close' readfd >> close' writefd)
+        
+createPipeInternalFd :: IO (FD, FD)
+createPipeInternalFd = do
+    allocaArray 2 $ \ pfds -> do
         throwErrnoIfMinus1_ "_pipe" $ c__pipe pfds 2 (#const _O_BINARY)
         readfd <- peek pfds
         writefd <- peekElemOff pfds 1
         return (readfd, writefd)
-    (do readh <- fdToHandle readfd
-        writeh <- fdToHandle writefd
-        return (readh, writeh)) `onException` (close' readfd >> close' writefd)
+
 
 close' :: CInt -> IO ()
 close' = throwErrnoIfMinus1_ "_close" . c__close
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,11 @@
 # Changelog for [`process` package](http://hackage.haskell.org/package/process)
 
+## 1.4.2.0 *January 2016*
+
+* Added `createPipeFD` [#52](https://github.com/haskell/process/pull/52)
+    * New function `createPipeFD` added which returns a POSIX File Descriptor (CInt)
+      instead of a GHC Handle to a pipe
+
 ## 1.4.1.0 *November 2015*
 
 * Use less CPP [#47](https://github.com/haskell/process/pull/47)
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -5,10 +5,7 @@
 
 AC_CONFIG_HEADERS([include/HsProcessConfig.h])
 
-AC_ARG_WITH([cc],
-            [C compiler],
-            [CC=$withval])
-AC_PROG_CC()
+AC_PROG_CC
 
 dnl ** Working vfork?
 AC_FUNC_FORK
diff --git a/process.cabal b/process.cabal
--- a/process.cabal
+++ b/process.cabal
@@ -1,5 +1,5 @@
 name:          process
-version:       1.4.1.0
+version:       1.4.2.0
 -- NOTE: Don't forget to update ./changelog.md
 license:       BSD3
 license-file:  LICENSE
