关于APUE第一个程序编译出错问题,在线等~

xiyangbu 2007-10-25 06:58:10
从APUE的书上抄了第一个程序1-1,ourhdr.h 我是从课本后面的附录上面打上的,然后放在了/usr/include/中,程序存储为ls.c,程序如下:
#include <sys/types.h>
#include <dirent.h>
#include "ourhdr.h"

int
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;

if(argc!=2)
err_quit("a single argument (the directory name)is required");

if((dp=opendir(argv[1]))==NULL)
err_sys("can't open %s",argv[1]);
while((dirp=readdir(dp))!=NULL)
printf("%s\n",dirp->d_name);

closedir(dp);
exit(0);
}

编译:gcc ls.c ,出错问题如下:
[root@localhost ~]# gcc ls.c
ls.c: 在函数 ‘pr_mask’ 中:
ls.c:7: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘{’ token
ls.c:21: 错误:原型函数定义中使用了旧式参数声明
ourhdr.h:35: 错误:省略了形参的名字
[root@localhost ~]#
大家帮忙看看是什么问题?谢~~
...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiyangbu 2007-10-25
  • 打赏
  • 举报
回复
这个问题得到了解决。ourhdr.h需要把后面的标准出错函数包含进来,
ls.c: 在函数 ‘pr_mask’ 中:
ls.c:7: 错误:expected ‘;’, ‘,’ or ‘)’ before ‘{’ token
这个问题是由于在定义语句的时候没有加 ;
此处:
void pr_mask(const char *) /*Program 10.10*/
Sigfunc *signal_intr(int, Sigfunc *); /*Program 10.13*/


xiyangbu 2007-10-25
  • 打赏
  • 举报
回复
ourhdr.h吗?
/*Our own header, to be included *after* all standard system headers */

#ifndef __ourhdr_h
#define __ourhdr_h

#include <sys/types.h> /*required for some of our prototypes */
#include <stdio.h> /*for convenience*/
#include <stdlib.h> /*for convenience*/
#include <string.h> /*for convenience*/
#include <unistd.h> /*for convenience*/

#define MAXLINE 4096

#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/*default file access permissions for new files*/
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
/*default permissions for new directories*/

typedef void Sigfunc(int); /*for signal handlers*/

/*4.3BSD Reno<signal.h> doesn't define SIG_ERR*/#if defined(SIG_IGN) && !defined(SIG_ERR)
#define SIG_ERR ((Sigfunc *)-1)
#endif

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) > (b) ? (a) : (b))

/*prototypes for our own functions */
char *path_alloc(int *); /*Program 2.2*/
int open_max(void); /*Program 2.3*/
void clr_fl(int, int); /*Program 3.5*/
void set_fl(int, int); /*Program 3.5*/
void pr_exit(int); /*Program 8.3*/
void pr_mask(const char *) /*Program 10.10*/
Sigfunc *signal_intr(int, Sigfunc *); /*Program 10.13*/

int tty_cbreak(int); /*Program 11.10*/
int tty_raw(int); /*Program 11.10*/
int tty_reset(int); /*Program 11.10*/
void tty_atexit(void); /*Program 11.10*/
#ifdef ECHO /*only if <termios.h> has been included */
struct termios *tty_termios(void); /*Program 11.10*/
#endif


void sleep_us(unsigned int); /*Exercise 12.6*/
ssize_t readn(int, void *, size_t); /*Program 12.13*/
ssize_t writen(int, const void *,size_t);/*Program 12.12*/
int daemon_init(void); /*Program 13.1*/

int s_pipe(int *); /*Program 15.2 and 15.3*/
int recv_fd(int, ssize_t (*func) (int, const void *,size_t);
/*Program 15.6 and 15.8*/
int send_fd(int, int); /*Program 15.5 and 15.7*/
int send_err(int, int, const char *);/*Program 15.4*/
int serv_listen(const char *); /*Program 15.19 and 15.22*/
int serv_accept(int, uid_t *); /*Program 15.20 and 15.24*/
int cli_conn(const char *); /*Program 15.21 and 15.23*/
int buf_args(char *,int (*func)(int, char **));
/*Program 15.17*/
int ptym_open(char *); /*Program 19.1 and 19.2*/
int ptys_open(int, char *); /*Program 19.1 and 19.2*/
#ifdef TIOCGWINSZ
pid_t pty_fork(int *,char *,const struct termios *, const struct winsize*);
/*Program 19.3*/
#endif


int lock_reg(int, int, int, off_t , int, off_t);
/*Program 12.2*/
#define read_lock(fd, offset, whence, len) \
lock_reg(fd,F_SETLK, F_RDLCK, offset, whence, len)
#define readw_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLKW, F_RDLCK, offset ,whence, len)
#define write_lock(fd, offset, whence, len) \
lock_reg(fd, F_SETLK, F_WRLCK, offset, whence ,len)
#define writew_lock(fd, offset ,whence ,len)\
lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence ,len)
#define un_lock(fd, offset, whence, len)\
lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)

pid_t lock_test(int, int, off_t, int, off_t);
/*Program 12.3*/

#define is_readlock(fd, offset, whence, len)\
lock_test(fd, F_RDLCK, offset, whence, len)
#define is_writelock(fd, offset, whence, len) \
lock_test(fd, F_WRLCK, offset, whence, len)
void err_dump(const char *, ...); /*Appendix B*/
void err_msg(const char *, ...);
void err_quit(const char *,...);
void err_ret(const char *,...);
void err_sys(const char *,...);

void log_msg(const char *,...);
void log_open(const char *,...);
void log_quit(const char *,...);
void log_ret(const char *,...);
void log_sys(const char *,...);

void TELL_WAIT(void);
void TELL_PARENT(pid_t);
void TELL_CHILD(pid_t);
void WAIT_PARENT(void);
void WAIT_CHILD(void);

#endif /* __ourhdr.h**/


好像是我的ourhdr.h不完全是吗?在我的附录里,ourhdr.h只是这样的,但是后面还有两个标准出错的处理函数,是不是应该也把这一部分给包含到ourhdr.h的头文件中阿?
cceczjxy 2007-10-25
  • 打赏
  • 举报
回复
你应该把那一部分也贴出来.

23,124

社区成员

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

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