C语言 在队列上执行 tr 命令



我有一个服务器和客户端应用程序,使用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(

最后一步实际上是可选的,因为您始终可以直接从文件描述符中读取。

最新更新