在编译以下代码时,我收到了来自gcc编译器的werid警告:
int main( int argc, char *argv[] )
{
int fdm;
pid_t pid;
fdm = posix_openpt( O_RDWR );
pid = fork();
if(pid==0)
{
if(grantpt(fdm) ==-1)
{
perror("grantpt");
exit(EXIT_FAILURE);
}
if(unlockpt(fdm) ==-1)
{
perror("unlockpt");
exit(EXIT_FAILURE);
}
char* name = ptsname(fdm);
int fds = open(name,O_RDWR);
if(fds ==-1)
{
perror("open");
exit(EXIT_FAILURE);
}
close(0);
close(1);
close(2);
dup(fds);
dup(fds);
dup(fds);
execlp("cat","cat",NULL);
perror("cat");
exit(EXIT_FAILURE);
}
printf( "main: copied %d bytes\n", dblCOPY( STDIN_FILENO, fdm, fdm, STDOUT_FILENO ) );
return 0;
}下面是警告:
warning: initialization makes pointer from integer without a cast [enabled by default]
char* name = ptsname(fdm);werid的问题是ptsname函数返回的是char指针,而不是编译器声称的整型,那么问题出在哪里呢?
发布于 2021-01-19 20:23:51
在包含头文件之前,您可能需要定义一些功能测试宏。
请参见手册页man feature_test_macros
有两种方法可以删除此警告,
#定义_XOPEN_SOURCE
#定义_XOPEN_SOURCE_EXTENDED
#包含
#包含
#包含
#包含
#包含
#包含
#包含
#包含
char *ptsname(int fd);
int posix_openpt(int标志);
int grantpt(int fd);
int unlockpt(int fd);
我希望这能解决这个问题
https://stackoverflow.com/questions/65791051
复制相似问题