通过管道将数据传递到C程序

时间:2018-11-07 21:39:46

标签: c bash

我想通过管道将数据发送到简单的c程序:

#include <stdio.h>
int main(int argc, char const *argv[])
{
char message[100000];
scanf("%s", message);
printf("%s", message);
return 0;
}

例如,我想将/ etc / passwd中的所有数据打印到终端。为此,我输入:

cat /etc/passwd | ./my_c_program

但是它不起作用,它只显示“ ##”。

1 个答案:

答案 0 :(得分:1)

最简单的方法之一就是使用 getline() man页描述了以下功能:

  

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

     

getline()从流中读取整行,并将包含文本的缓冲区的地址存储到*lineptr中。缓冲区以null终止,并且如果找到了换行符,则包含换行符。

顺便说一句,记住这一段:

  

如果在通话前将*lineptr 设置为NULL ,并且将*n 设置为0 ,则getline()分配缓冲区来存储行。 即使getline()失败,用户程序也应释放该缓冲区

在一个工作样本下面。

#include <stdio.h>

int main(int argc, char* argv)
{
  char* l = NULL;
  size_t n;
  while (getline(&l,&n, stdin) != -1 )
    {
      printf("%s",l);
    }
  free(l); // don't forget to release the allocated memory
           // mmh, yes, here it's not useful since the program
           // ends.
}

此答案受此SO reply的启发。