unix高级环境编程问题请教?
我是个新手,在学习unix高级环境编程的时候,在第三章遇到一个例题:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include "ourhdr.h"
char buf1[]="abcdefghij";
char buf2[]="ABCDEFGHIJ";
int main(void)
{
int fd;
if((fd=creat("file.hole",FILE_MODE)) <0)
err_sys("creat error"
if(write(fd,buf1,10)!=10)
err_sys("buf1 write error"
if(lseek(fd,40,SEEK_SET)==-1)
err_sys("lseek error"
if(write(fd,buf2,10)!=10)
err_sys("buf1 write error"
exit(0);
}
我在用gcc编译的时候通不过,那位朋友帮着看一下,谢谢!
我用gcc -o a.out test.c
ourhdr.h 如下:
#ifndef _ourhdr_h
#define _ourhdr_h
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAXLINE 4096
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
typedef void Sigfunc(int);
#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))
char *path_alloc(int *);
int open_max(void);
void clr_fl(int,int);
void set_fl(int,int);
void pr_exit(int);
void pr_mask(const char *);
Sigfunc *signal_intr(int,Sigfunc *);
int tty_cbreak(int);
int tty_raw(int);
int tty_reset(int);
void tty_atexit(void);
#ifdef ECHO
struct termios *tty_termios(void);
#endif
void sleep_us(unsigned int);
ssize_t rdadn(int,void *,size_t);
ssize_t writen(int, const void *,size_t);
int daemon_init(void);
int s_pipe(int *);
int recv_fd(int, ssize_t (*func) (int,const void *,size_t));
int send_fd(int *);
int send_err(int,int,const char *);
int serv_listen(const char *);
int serv_accept(int,uid_t *);
int cli_conn(const char *);
int buf_args(char *, int (*func) (int, char **));
int ptym_open(char *);
int ptys_open(int, char *);
#ifdef TIOCGWINSZ
pid_t pty_fork(int *,char *, const struct termios *,const struct winsize *);
#endif
int lock_reg(int,int,int,off_t,int off_t);
#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);
#define is_readlock(fd,offset,whence,len)
lock_test(fd,F_EDLCK,offset,whence len)
#define is_writelock(fd,offset,whence,len)
lock_test(fd,F_WRLCK,offset,whence,len)
void err_dump(const char *, ...);
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 *, int,int);
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
去www.apuebook.com下载源代码
发现好多人问跟ourhdr.h相关的问题,里面的自定义函数书上都有实现,就没有人想到过自己把那些函数敲进去么?
不要说傻,我以前就是这样做的,书上的例子我也是自己敲进去编译验证的。
你的 ourhdr.h头 文件里只有函数 声明,没有实现部分,所以编译不通.
你可以 把 ourhdr.h这个头文件 抛弃.
err_sys 这样的函数 无非是封装了 perror 等这样的 错误处理函数.自己写一个.