高端建站设计/事件营销
unix学习过程中找不到ourhdr.h文件
首先我先来介绍一下什么是ourder.h文件,这就是作者自己写的一个库,比如unix或Linux中unistd.h这就是系统自己的函数库,这些库函数都在/usr/include中,所以我们要想编译含有ourhdr.h的c文件,必须手动导入库
以下是ourhdr.h的库文件:
/Our own header, to be included after all standard system headers/
#ifndef __ourhdr_h
#define __ourhdr_h
#include <errno.h>/*for definition of errno */
#include <stdarg.h>/ANSI C header file/
#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 / max line length /
#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 directoris /
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 ); / {Prog pathalloc} /
int open_max(void); / {Prog openmax} /
void clr_fl(int, int); / {Prog setfl} /
void set_fl(int, int); / {Prog setfl} /
void pr_exit(int); / {Prog prexit} */
void pr_mask(const char ); / {Prog prmask} */
Sigfunc *signal_intr(int, Sigfunc );/ {Prog signal_intr_function} /
int tty_cbreak(int); / {Prog raw} /
int tty_raw(int); / {Prog raw} /
int tty_reset(int); / {Prog raw} /
void tty_atexit(void); / {Prog raw} /
#ifdef ECHO / only if <termios.h> has been included */
struct termios tty_termios(void); / {Prog raw} /
#endif
void sleep_us(unsigned int); / {Ex sleepus} */
ssize_t readn(int, void , size_t);/ {Prog readn} */
ssize_t writen(int, const void , size_t);/ {Prog writen} /
int daemon_init(void); / {Prog daemoninit} */
int s_pipe(int ); / {Progs svr4_spipe bsd spipe} */
int recv_fd(int, ssize_t (*func)(int, const void , size_t));
/ {Prog recvfd_svr4 recvfd_43bsd} /
int send_fd(int, int); / {Progs sendfd_svr4 se dfd_43bsd} */
int send_err(int, int, const char );/ {Prog senderr} */
int serv_listen(const char ); / {Progs servlisten_svr4 servli ten_4 4bsd} */
int serv_accept(int, uid_t ); / {Progs servaccept_svr4 servac ept_4 4bsd} */
int cli_conn(const char ); / {Progs cliconn_svr4 cliconn_4 bsd} */
int buf_args(char *, int (*func)(int, char *));
/ {Prog bufargs} */
int ptym_open(char ); / {Progs ptyopen_svr4 p yopen_44bsd} */
int ptys_open(int, char ); / {Progs ptyopen_svr4 ptyopen_4 bsd} */
#ifdef TIOCGWINSZ
pid_t pty_fork(int *, char *, const struct termios *,
const struct winsize ); / {Prog ptyfork /
#endif
int lock_reg(int, int, int, off_t, int, off_t);
/ {Prog lockreg} /
#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);
/ {Prog locktest} */
#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 , …); / {App misc_source} */
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 , …); / {App misc_source} */
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); / parent/child from {Sec race_condition } /
void TELL_PARENT(pid_t);
void TELL_CHILD(pid_t);
void WAIT_PARENT(void);
void WAIT_CHILD(void);
#endif / __ourhdr_h */
将这个文件复制放在/usr/include下
为什么要在这里用sudo那?
因为我试过如果直接vi 然后保存,是会出现无法打开并写入文件的报错
鉴于新手我顺带讲一下windows和ubuntu的之间复制粘贴问题:
以下完美解决:
sudo apt-get autorremove open-vm-tools
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop
重启虚拟机
这样直接就可以右键在vim文件中弹出来粘贴
解决完复制粘贴问题,你就把之前提到的ourhdr.h复制到/usr/include下
其实到这一步解决了80%问题
因为unix那本书里面还有err_sys这个函数,其实这个函数也是作者写的my_err.h头文件中的函数,你要是真想把书上的运行起来,你就在网上找然后继续复制粘贴到/usr/include下
反正我试过一次,没成功,因为太懒了,感觉那个err_sys就实现输出,还不如用printf,反正运行成功了最后