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

标签 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 中,然后将其打印在文本文件中。

最佳答案

这个:

   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);

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

关于c - 将数据从串行端口传输到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310272/

相关文章:

c - 如何显示字符数组?

c - 使用 GCC 生成可读程序集?

c - 用于获取输入的 If 循环在 C 中不起作用

c - 如何在 Linux 上调试内存覆盖

shell - 修改两个模式之间的每一行字符

bash - Unix Bash Shell 脚本文件大小

c# - 从目录中获取文件时排除某些文件扩展名

linux - 更改运行 Angstrom Linux 的 BeagleBone UART0 的波特率

java - RXTX getPortIdentifiers() 返回空

c# - 保证代码在 C# 终结器中运行