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