1. 背景
有一个后台运行的程序,需要向它的标准输入传递数据。
2. 原理
在Linux系统中,出socket之外的fd均可用read/write来对其进行读写操作。
3. 实例
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <signal.h>
#include <poll.h>
int main(int argc, const char *argv[])
{
char buffer[128] = {0};
for (; ; ) {
struct pollfd fds = {
.fd = STDIN_FILENO,
.events = POLLIN
};
int res = poll(&fds, 1, -1);
for (int i = 0; i < res; i++) {
int len = read(fds.fd, buffer, sizeof(buffer));
printf("len[%d], %s\n", len, strerror(errno));
}
}
return 0;
}
4. 后台运行
./a.out &
5. 传递数据
echo -e "This is a test\n" > /proc/`pidof a.out`/fd/0
6. 输出结果
This is a test