将数据从串行端口传输到文本文件

时间:2014-06-19 15:21:22

标签: c file serial-port scanf

我正在使用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中,然后将其打印在文本文件中。

1 个答案:

答案 0 :(得分: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