error:syntax error before "va_mode_t"

zhangsc 2010-11-01 01:11:59
使用Solaris10,写了一个函数,代码如下:
int Open(const char *pathname,int oflag,...){
int fd;
va_list ap;
mode_t mode;
if(oflag & O_CREAT){
va_start(ap,oflag);
mode=va_arg(ap,va_mode_t);
if((fd=open(pathname,oflag,mode))==-1)
err_sys("open error for %s",pathname);
va_end(ap);
}
else{
if((fd=open(pathname,oflag))==-1)
err_sys("open error for %s",pathname);
}
return(fd);
}


编译时产生如下错误,
In function 'Open':
error:syntax error before "va_mode_t"

为什么会产生错误呢?如何修改,谢谢!
...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2010-11-07
  • 打赏
  • 举报
回复
mode = va_arg(ap, mode_t);

/**
* @file myopen.c
* @brief
*/

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <errno.h>
#include <stdarg.h>

int Open(const char *path, int oflag, ...)
{
int fd;
mode_t mode;
va_list ap;

mode = 0;
if (oflag & O_CREAT) {
va_start(ap, oflag);
mode = va_arg(ap, mode_t);
va_end(ap);
}

if ((fd = open(path, oflag, mode)) < 0) {
fprintf(stderr, "open %s: %s\n", path, strerror(errno));
exit(1);
}

return fd;
}

int
main(int argc, char *argv[])
{
int fd;

fd = Open("/hello.c", O_CREAT, 0666);
return 0;
}
Linux-Torvalds 2010-11-07
  • 打赏
  • 举报
回复
mode=va_arg(ap,va_mode_t);
justkk 2010-11-01
  • 打赏
  • 举报
回复
类型写错了吧,应该是mode=va_arg(ap,mode_t);
zhangsc 2010-11-01
  • 打赏
  • 举报
回复
包括头文件了sys/varargs.h
justkk 2010-11-01
  • 打赏
  • 举报
回复
包含头文件了吗?#include <sys/varargs.h>

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧