#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
打开目录之后别完了关目录
运行结果
简略版有错误请联系纠正,谢谢