将从com端口接收的数据写入.txt文件(raspbian)

时间:2015-07-22 08:41:39

标签: c raspberry-pi port raspbian

基本上我有一个连接到raspberry pi的com端口,我试图将收到的数据附加到.txt文件中。到目前为止,我只是成功打开了文件..我应该如何编辑现有代码,以便能够“保存”#34;数据进入打开的文件?

我也尝试过编辑:

$1

但似乎这会阻止数据被接收。

现在的代码如下:

FILE *f;
f = fopen("try.txt", "a");

    if (f == NULL)
    {
    printf("Error opening file!\n");
    exit(1);
    }

int r;        
char buf[255];       
    while( 1 )
    {        
    r = read( fd, buf, 255 );        
    buf[r]=0;        
    fprintf( f, "%s", buf);
    }
fclose(f);

新的raspbian等..任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

第一个问题是您正在尝试打印字符串,并且您的缓冲区格式不正确:字符串以' \ 0'结尾,而printf将查找该字符串。

您可以阅读254个字符并手动添加' \ 0'作为最后一个字符或使用其他一些机制(例如cout)。

但即使这样也比较混乱。有一个更难实现,但更优雅的解决方案:

  1. Read是一个阻塞函数;即它会阻止,直到您读取预期的数据量。您可以通过将正在读取的端口配置为非阻塞来避免这种情况(请参阅O_NONBLOCK)
  2. 使用select with a timeout,以了解数据何时可用
  3. 当数据可用时,请按以下方式阅读:

    nr_bytes = read(fd,buf,255);

    是的,它只是在你读取可用数据而不是等待所有255个字节时返回的相同读数。所以你刚刚阅读了nr_bytes字节,你可以写入你的文件。

  4. REPEAT ...

  5. 希望这有帮助!