Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在套接字C中发送字符串?_C_String_Bash_Sockets - Fatal编程技术网

在套接字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。