我在JNA中工作以调用C函数,并且我非常习惯于读取单个字节的Javaread()
函数。在C语言中是否有一种不用声明缓冲区就能做到这一点的方法?
发布于 2015-04-21 18:19:59
char oneByte;
int r=read(fd, &oneByte, 1);
是的,应该管用。
发布于 2015-04-21 18:20:09
这取决于您想要读取流(即文件*)还是文件描述符。
对于一条小溪,你有
getc(FILE *stream);
对于文件描述符,可以使用字节变量作为缓冲区,如下所示
unsigned char b; //or signed if you prefer
read(fd, &b, 1);
发布于 2015-04-22 04:13:36
对于建议使用read()的答案,应该如下所示:
char b;
int r;
while((r=read(fd,&b,1))==-1 && errno==EINTR) {}
if(r==.....
原因是,如果信号的传递中断,那么read()就需要重新启动。如果你不测试EINTR,你可能会面临随机的,很难找到错误。
https://stackoverflow.com/questions/29786548
复制