例如,假设我有一个文件server.c,它不打印任何东西,但有一个字符串,例如:“鱼在空中游泳”。我想要做的是让child.c打印server.c的字符串 这甚至可能吗?我被告知使用管道(如popen())会有所帮助。但我找不到我想要的东西。
答案 0 :(得分:2)
我确定可能有办法使用管道功能(检查此类网站unixwiz.net/techtips/remap-pip-fds.html),但您所描述的内容听起来像另一个客户端连接到服务器并通过套接字将字符串发送给它。使用套接字还可以打开通过网络检查服务器字符串的功能。通常使用服务器进行错误/额外日志检查,它由服务器打开日志文件或通过套接字发送来处理。如果安全性存在问题,您可以决定将其发送到通过TLS连接使用PSK的特定客户端。
对于TLS示例,请查看https://github.com/wolfSSL/wolfssl-examples
在管道代码中添加
receiver.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4
5 int main() {
6
7 char buffer[1024];
8
9 fscanf(stdin, "%s", buffer);
10
11 printf("receiver got data and is printing it\n");
12 printf("%s\n", buffer);
13
14 return 0;
15 }
sender.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4
5
6 int main()
7 {
8 FILE *output;
9
10 output = popen ("./receiver","w");
11 if (!output) {
12 /* error checking opening pipe */
13 fprintf(stderr, "could not open pipe\n");
14 return 1;
15 }
16
17 fprintf(output, "%s", "hello_world\n");
18
19 if (pclose (output) != 0) {
20 /* error checking on closing pipe */
21 fprintf(stderr, " could not run receiver\n");
22 return 1;
23 }
24
25 return 0;
26 }
使用
编译并在同一目录中运行gcc sender.c -o sender
gcc receiver.c -o receiver
./sender