gpt4 book ai didi

c - 在队列上执行 tr 命令?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:25 24 4
gpt4 key购买 nike

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

更严重的是,您可能应该使用 popen 自动(并且稳健地) fork 并使用管道为您设置 FILE *

FILE *cmd = popen("tr ... ", "r");

然后从中简单地fgets(不要忘记pclose 它)。遗憾的是,在 Linux 上您不能同时写入和读取打开的文件(在 FreeBSD 上可以)。

编辑

由于这是一道家庭作业题(坦率地说,因为我认为在晚上的这个时候完全正确地完成它并不容易),下面是 popen 实际做的事情:

  • 创建管道
  • fork 一个将运行命令的 shell
  • 返回一个FILE *(可能通过fdopen)

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

关于c - 在队列上执行 tr 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com