【问题标题】:Transferring data from a serial Port to a text file将数据从串行端口传输到文本文件
【发布时间】:2014-06-19 15:21:21
【问题描述】:

我正在使用 debian,我必须将数据从串行端口传输到文本文件中,然后才能读取到数据库中。我认为我设置端口的方式是错误的,我一直在很多不同的例子中磕磕绊绊,我当前的代码(下面)不断给我 3 个警告,“赋值使指针从整数没有强制转换”我认为它与正在返回的值,我对指针返回的内容做了一些阅读,但对我来说并不太清楚,我想知道是否有人可以就这个问题提供一些见解,或者我是否有任何明显的问题失踪。任何建议都非常感谢。

       #include <stdio.h>
       #include <fcntl.h>
       #include <sys/stat.h>
       #include <termios.h>
       #include <string.h>

        #define BAUDRATE B115200
        #define MODEMDEVICE "/dev/ttyS0"
        main()
        {

         int n;

         FILE *file;
         file = open(MODEMDEVICE, O_RDWR, O_NOCTTY);

         if(file == NULL){
                printf("initiation error. \n");
                return 1;
           }

       FILE *fp;
          fp = open("testfile.txt", O_RDWR);

            while(1){

                      file = scanf("%d", &n);
                      fprintf(fp, "%d", n);
                       fclose(fp);
                       }
         fclose(file);
   }

所以我认为这样做,或者至少我打算这样做是设置文件以从端口读取数据,然后将这些值存储在 n 中,然后将其打印到文本文件中。

【问题讨论】:

标签: c file serial-port scanf


【解决方案1】:

这个:

   FILE *fp;
   fp = open("testfile.txt", O_RDWR);

错了,你的意思是最后一行的fopen(),不要将原始 I/O 与 C 运行时库的缓冲函数混淆。

这也是您出错的原因之一,因为open() 返回的文件描述符(不是指针)是一个整数(请参阅open() 手册页并将其与fopen()'s 进行比较)。

更新:我也无法理解您要对 scanf() 行做什么。

如果你想从FILE * 中读取一个整数,你应该使用fscanf()。返回值是成功转换的次数,用于错误检查:

if(fscanf(file, "%d", &n) == 1)
  fprintf(fp, "%d", n);

这将从串口file读取一个整数,如果成功则将其打印到输出文件fp

【讨论】:

  • 好的,谢谢,确实有效,似乎 O_RDWR 和 fopen 不同意,将其切换为“a”处理了其中一个警告
  • @user3681077 当然参数不同,请阅读函数文档。您似乎只是通过猜测在盲人编程。
  • file = scanf("%d", &n);
  • 我知道只要我说 scanf("%d" ,&n); 警告就会消失期望我需要存储在 n 中的文件内容。我知道 fscanf 是可重定向的,这会带来更多问题
猜你喜欢
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多