I have a process that I'm trying to send input to on OS X. I'm using Emacs' builtin functions for doing this: process-send-string and process-send-region . However, it seems that there are issues when doing this on OS X. Specifically, it seems that I cannot send a process more than 1 KiB of data. To demonstrate what I mean, here's an example.

I started an Elisp REPL with M-x ielm and ran the following command:

ELISP> (start-process "cat" "*cat*" "cat") #<process cat>

Then I ran this (no reason I'm using f ; it's just a letter I thought of):

ELISP> (process-send-string (get-process "cat") "fff

")

And I got what I expected in the *cat* buffer:

fff

Now, what if I send this:

(process-send-string (get-process "cat") "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

")

That is a string of 1,024 f characters (which is 1 KiB), followed by a newline so that cat knows that's the end of the input line. That is a grand total of 1,025 bytes which is just over 1 KiB. When I run the above command, all I get in the *cat* buffer is:

^G

It is highlighted so I know that it's a control character. Specifically, this is the ASCII BEL which is number 7. I guess this means that Emacs is getting an error in its write call to cat . The cat process is still alive, though.

According to errno.h , 7 is the error number for the POSIX E2BIG error. E2BIG is described like so in man 2 intro :

7 E2BIG Arg list too long. The number of bytes used for the argument and environment list of the new process exceeded the limit NCARGS (specified in <sys/param.h>).

However, NCARGS is defined as ARG_MAX in param.h . ARG_MAX is defined as 256 * 1024 in syslimits.h , which is 256 KiB. So it seems that I shouldn't be having this problem since my input size is well within the bounds. However, I notice the following settings which are also defined in the system headers:

syslimits.h:81:#define MAX_CANON 1024 /* max bytes in term canon input line */ syslimits.h:82:#define MAX_INPUT 1024 /* max bytes in terminal input */ ... syslimits.h:91:#define PATH_MAX 1024 /* max bytes in pathname */ ... dirent.h:100:#define __DARWIN_MAXPATHLEN 1024 ... _types/_fd_def.h:42:#define __DARWIN_FD_SETSIZE 1024

All of these constants are set to 1024. I wonder if one of them is causing this errant behavior with cat described above. However, this doesn't happen in the terminal. It seems to be specific to Emacs.