我有一个使用IPC队列的服务器和客户端应用程序。服务器(现在)只是简单地发回从客户端收到的文本。我希望服务器将消息中的字母从大写更改为大写。我想知道如何实现它。我必须创建一个管道吗?我正在考虑从接收到的队列中“抓取”文本,在其上执行tr命令并发送回客户端。但是如果使用管道,我从哪里获取文件描述符?我的意思是,int fds[2];
和pipe(fds);
给了我一个管道,但是它没有像这样处理两个char数组:
int fds[2];
pipe(fds);
char a[100];
char b[100];
fds[0] = open(a,O_RDOLNY);
fds[1] = open(b,O_WRONLY);
如何对邮件队列所持文本执行tr命令?
答案 0 :(得分:1)
我不会fork
这个程序:
p = str;
while (*p) {
*p = toupper(*p);
p++;
}
更严重的是,您应该使用popen
自动(并且健壮)分叉并使用管道为您设置FILE *
。
FILE *cmd = popen("tr ... ", "r");
然后从中简单fgets
(不要忘记pclose
它)。可悲的是,在Linux上你不能同时写入和读取一个popened文件(你可以在FreeBSD上)。
因为这是一个家庭作业问题(坦白说,因为我觉得在夜间的这个时候完全没法完成它是微不足道的),这是popen
实际上做的事情:
FILE *
(可能通过fdopen
)最后一步是可选的,因为你总是可以直接从文件描述符中读取。