串口编程 - 基于C标准库

简介

操作系统:WIN7

开发IDE:CodeLite V3.0.5041

编译器:GNU GCC V4.5.2

代码

/***********************************************************************//**
 * @file        main.c
 * @brief        Serial Port programming, using C standard library
 * @version        1.0
 * @date        7. July. 2013
 * @author        jerry2012cn(tudengqian@gmail.com)
 **************************************************************************/
#include <stdio.h>

int main()
{
    char* COMx = "com3";
    FILE* fp;

    printf("This's Serial Port Testing!\n");

    /** Open Com */
    if ((fp = fopen(COMx, "wb+")) == NULL) {
        printf("Open %s Failed!\n",COMx);
    }

    /** Send "Hello,world!" */
    fwrite((char*)"Hello,world!",sizeof("Hello,world!"),1,fp);

    /** Notice: moves the file position indicator to the beginning in a file */
    rewind(fp);

    char recBuf = 0x00;
    /** waiting a vaild character */
    while (fread(&recBuf, 1, 1, fp) == 0);

    printf("Received char is %c\n", recBuf);

    /** close Com */
    fclose(fp);

    return 0;
}

解释

在Linux操作系统里,一切皆文件!windows借鉴Linux这一思想;像串口,并口,传真机等都属于字符设备。由于C语言没有提供特定的输入/输出语句,程序的输入/输出功能是通过调用输入/输出函数来实现的, 为了方便程序的编写及函数的调用C语言提供了一个标准输入/输出函数库作为程序的接口。在标准输入/输出库中集中了一系列输入/输出函数。C把标准输入/输出库中各函数所需要的定义说明全部写在文件“stdio.h”中,编写程序时要进行的输入/输出操作必须引用这一文件。同时也可以自己开发输入/输出语句来代替原来的库函数,这样能方便地从一个系统移植到另一个系统。

不知道如何通过标准库哪些函数可以去设置波特率等参数!

重要函数介绍

fopen()

功能:打开一个文件。

函数原型:

        FILE * fopen(const char * path,const char * mode);

参数说明:

    1. path : 文件路径\文件名
    2. mode:读写模式,有r, w, 等

返回值:如果打开成功,返回指向文件的指针,打开失败返回NULL.

fclose()

功能:关闭一个流,可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。

函数原型:

        int fclose(FILE *stream);

    1. stream: 文件流指针

返回值:关闭成功返回0,失败返回EOF。

fwrite()

功能:向文件流写入一个数据块。

函数原型

        size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

    1. buffer:是一个指针,对fwrite来说,是要输出数据的地址;
    2. size:要写入内容的单字节数;
    3. count:要进行写入size字节的数据项的个数;
    4. stream:目标文件指针

返回值:返回实际写入的数据块数目

fread()

功能:从文件流读出一个数据块。

函数原型

        size_t fread ( void   *buffer,  size_t size,  size_t count,  FILE *stream) ;

    1. buffer:用于接收数据内存地址,大小至少是size*count字节
    2. size:单个元素的大小,单位是字节
    3. count: 元素的个数,每个元素是size字节.
    4. stream:目标文件指针

返回值:实际读取的元素个数.如果返回值与count不相同,则可能文件结尾或发生错误.

rewind()

功能:将文件内部的位置指针重新指向一个流(数据流/文件)的开头。等价于(void)fseek(stream, 0L, SEEK_SET);

函数原型

        void rewind(FILE *stream);

    1. stream:目标文件指针

返回值: 无

----------------------------------------------------END----------------------------------------------

转载于:https://my.oschina.net/jerry2012cn/blog/142590

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值