树莓派获取温度—c语言(简单版)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
        int fd =-1;
        char buf[128];
        char *ptr;
        float temp;
        fd=open("/sys/bus/w1/devices/28-0317320a8aff/w1_slave",O_RDONLY);
        if(fd<0)
        {
        printf("can not open");
        retun -1;
        }
        memset(buf,0,sizeof(buf));
        read(fd,buf,sizeof(buf));

        printf("%s\n",buf);
        ptr=strstr(buf,"t=");
        if(!ptr)
        {
        printf("Can not find \n");
        return -2;

        }

        ptr +=2;
        printf("ptr:%s\n",ptr);
        temp = (atof(ptr))/1000;
        printf("temp:%f\n",temp);
        close(fd);
        return 0;



}

运行结果

该代码的缺点是无法随着序列号的变化而变化

详解:

利用open函数打开树莓派相关保持温度的文件并打开

open

函数:当打开失败时会返回值,即-1,否则放回正整数

以下是使用该函数需要的头文件,可在Linux下使用man 2 open 查看,其他函数皆如此

  

 int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

pathname表示文件的路径,

flags表示打开后的限权,O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR可读可写打开

mode一定是在flags中使用了O_CREAT标志,mode记录创建文件访问权限。

memset

memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。

  • s指向要填充的内存块。
  • c是要被设置的值。
  • n是要被设置该值的字符数。
  • 返回类型是一个指向存储区s的指针。

read

read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用

fd: 这是一个已经打开的文件描述符,表示从这个文件描述符所代表的文件读取数据。

buf: 指缓冲区,即读取的数据会被放到这个缓冲区中去。

count: 表示调用一次read操作,应该读多少数量的字符。一般用sizeof函数直接计算

strstr

strstr(str1,str2)函数表示从字符串str1中查找是否存在字符串str2,如果有,则返回该字符串(str2)的起始位置,没有则返回NULL

atof

把字符串转换为浮点型,类似的还有atoi等等

close

打开目录之后别完了关目录

运行结果

简略版有错误请联系纠正,谢谢


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值