C Linux的GPIO示例代码
我有几个问题与上述GPIO代码有关 1) 为什么要使用ssize\t?为什么不用int呢 2) /sys/class/gpio/unexport是“系统文件”吗?如果不是,它是什么 3) snprintf将一些东西打印到缓冲区,那么写函数是多余的吗?或者写函数可以做什么不同的事情 4) 我可以用ioctl函数代替open吗C Linux的GPIO示例代码,c,linux,C,Linux,我有几个问题与上述GPIO代码有关 1) 为什么要使用ssize\t?为什么不用int呢 2) /sys/class/gpio/unexport是“系统文件”吗?如果不是,它是什么 3) snprintf将一些东西打印到缓冲区,那么写函数是多余的吗?或者写函数可以做什么不同的事情 4) 我可以用ioctl函数代替open吗 我不知道为什么代码示例使用ssize_t;snprintf的返回类型是int,因此使用int会更好(以避免隐式强制转换)。ssize_t是有符号的,在大多数情况下,它至少与i
ssize_t
;snprintf的返回类型是int
,因此使用int
会更好(以避免隐式强制转换)。ssize_t
是有符号的,在大多数情况下,它至少与int
一样大,因此可能不会造成伤害dprintf
直接写入文件描述符fd
,这样您就不需要临时缓冲区了。dprintf
与其他printf
变体相比,我们知之甚少,所以可能这就是原始代码的作者决定使用中间缓冲区,然后只调用标准的低级write
功能ioctl
函数static int
GPIOUnexport(int pin)
{
char buffer[BUFFER_MAX];
ssize_t bytes_written;
int fd;
fd = open("/sys/class/gpio/unexport", O_WRONLY);
if (-1 == fd) {
fprintf(stderr, "Failed to open unexport for writing!\n");
return(-1);
}
bytes_written = snprintf(buffer, BUFFER_MAX, "%d", pin);
write(fd, buffer, bytes_written);
close(fd);
return(0);
}