编译名为Online_ana.c的程序(通过运行makefile)时,包含以下行:
******#define FIFO1 (getenv("fifo1"))******
FILE *fifoFile;
54 : if ((fifoFile = fopen((FIFO1!=NULL) ? FIFO1 : "fifo1", O_RDONLY)) == -1)
153 : if ((read(fifoFile, &BufferHeader, sizeof(struct event_header))) != sizeof(struct event_header))
168 : if ((read(fifoFile, &MyBuffer[cnt], 4*BufferHeader.n_sca)) != 4*BufferHeader.n_sca)
189 : if ((read(fifoFile, &MyBuffer[cnt], 2*(BufferHeader.n_adc+BufferHeader.n_tdc+BufferHeader.n_pcos))) != 2*(BufferHeader.n_adc+BufferHeader.n_tdc+BufferHeader.n_pcos))
I encountered such warnings:
Online_ana.c:**54**:69: warning: comparison between pointer and integer [enabled by default]
Online_ana.c: In function ‘GetBufferFromFifo’:
Online_ana.c:**153**:52: warning: passing argument 1 of ‘read’ makes integer from pointer without a cast [enabled by default]
/usr/include/unistd.h:361:16: note: expected ‘int’ but argument is of type ‘struct FILE *’
Online_ana.c:**168**:7: warning: passing argument 1 of ‘read’ makes integer from pointer without a cast [enabled by default]
/usr/include/unistd.h:361:16: note: expected ‘int’ but argument is of type ‘struct FILE *’
Online_ana.c:**189**:7: warning: passing argument 1 of ‘read’ makes integer from pointer without a cast [enabled by default]
/usr/include/unistd.h:361:16: note: expected ‘int’ but argument is of type ‘struct FILE *’
有什么问题?希望可以有人帮帮我。在此先感谢!!
答案 0 :(得分:3)
大多数情况下,警告是因为您将FILE*
(指针)传递给需要整数参数的函数。对于fopen
的警告,因为将指针(FILE*
)与整数(-1
)进行比较。
换句话说,您正在混合两个不同的I / O系统。
答案 1 :(得分:2)
您的代码全部编写,就好像您使用的是UNIX文件描述符,而不是标准的I / O文件句柄。如果您想这样做,请将fopen()
更改为open()
,并将fifoFile
的声明从FILE *
更改为int
。
答案 2 :(得分:0)
您正在使用fopen()打开一个标准库函数的文件,这将为您提供与该流关联的文件指针。 另一方面,您使用的是read(),它是一个系统调用,它将文件描述符作为第一个输入,即整数。
重要的是 - 流的模式必须与文件描述符的模式兼容。
虽然,也可以使用stdio.h中的int fileno(FILE * stream)将FILE *转换为文件描述符(fd)