unix高级环境编程问题请教?

发布于 2022-07-21 05:28:55 字数 4752 浏览 11 评论 3

我是个新手,在学习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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千纸鹤 2022-07-23 04:45:40

发现好多人问跟ourhdr.h相关的问题,里面的自定义函数书上都有实现,就没有人想到过自己把那些函数敲进去么?
不要说傻,我以前就是这样做的,书上的例子我也是自己敲进去编译验证的。

像你 2022-07-21 06:31:20

你的 ourhdr.h头 文件里只有函数 声明,没有实现部分,所以编译不通.

你可以 把 ourhdr.h这个头文件 抛弃.

err_sys 这样的函数 无非是封装了 perror 等这样的 错误处理函数.自己写一个.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文