在套接字C中发送字符串?
我正在尝试发送以下字符串: 服务器代码:在套接字C中发送字符串?,c,string,bash,sockets,C,String,Bash,Sockets,我正在尝试发送以下字符串: 服务器代码: char bash[256] = "grep 'usernama' data/*.txt | awk -F':' '{print $1}' | uniq"; char result[1000] = system(bash); send(connected, result,strlen(result), 0); fflush(stdout); 错误消息: error: array must be initialized with a brace-en
char bash[256] = "grep 'usernama' data/*.txt | awk -F':' '{print $1}' | uniq";
char result[1000] = system(bash);
send(connected, result,strlen(result), 0);
fflush(stdout);
错误消息:
error: array must be initialized with a brace-enclosed initializer
无法以这种方式将grep结果发送到客户端?
系统无法捕获它运行的命令的输出,因此无法以这种方式执行您想要的操作
如果查看,您可以看到它返回int
,即您运行的命令的退出状态
为了捕获流程的输出,您需要:
找一个为你做这件事的图书馆
使用管道实现编写自己的fork/exec代码
将输出重定向到临时文件,然后将其读入。(来自)
3会比2稍微简单一些,但会带来1或2中不会出现的安全性和可靠性问题。如果您愿意调用system()
并运行shell,最简单的方法可能是将输出重定向到一个文件,然后打开该文件,读取其内容并发送该文件
这当然会带来一系列问题(主要是竞争条件和错误处理),但这可能比深入学习fork()
和exec()
系统(3)返回fork(2)的状态,而不是forke程序的标准输出要简单一些。标准解决方案是使用管道:
char bash_cmd[256] = "grep 'usernama' data/*.txt | awk -F':' '{print $1}' | uniq":
char buffer[1000];
FILE *pipe;
int len;
pipe = popen(bash_cmd, "r");
if (pipe == NULL) {
perror("pipe");
exit(1);
}
fgets(buffer, sizeof(buffer), pipe);
len = strlen(bash_cmd);
bash_cmd[len-1] = '\0';
pclose(pipe);
您似乎缺少很多代码。@伊格纳西奥:可以指导我找到代码吗?所以没有直接简单的方法来完成吗?@origame:没有简单的C语言方法。可能更容易从bash完成所有工作,或者切换到更高级的语言,如python。