#include <errno.h> /* for definition of errno */
#include <stdarg.h> /* ANSI C header file */
#include "ourhdr.h"
static void err_doit(int, const char *, va_list);
char *pname = NULL; /* caller can set this from argv[0] */
/* Nonfatal error related to a system call.
Print a message and return */
void
err_ret(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
return;
}
/* Fatal error related to a system call.
Print a message and terminate. */
void
err_sys(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
exit(1);
}
/* Fatal error related to a system call.
Print a message and terminate. */
void
err_dump(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
abort(); /* dump core and terminate */
exit(1); /* shouldn't get here */
}
/* Nonfatal error unrelated to a system call.
Print a message and return. */
void
err_msg(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(0, fmt, ap);
va_end(ap);
return;
}
/* Fatal error unrelated to a system call.
Print a message and terminate. */
void
err_quit(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(0, fmt, ap);
va_end(ap);
exit(1);
}
/* Print a message and return to caller.
Caller specifies "errnoflag". */
static void
err_doit(int errnoflag, const char *fmt, va_list ap)
{
int errno_save;
char buf[MAXLINE];
errno_save = errno; /* value caller might want printed */
vsprintf(buf, fmt, ap);
if (errnoflag)
sprintf (buf+strlen(buf), ": %s", strerror (errno_save));
strcat (buf, "\n");
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(NULL); /* flushes all stdio output streams */
return;
}
分享到:
相关推荐
`ourhdr.h` 和 `ourhdr.c` 文件是常见的C语言源代码文件,通常用于定义和实现自定义的头文件和函数。在这个特定的场景中,它们可能包含了开发者自定义的一些常用功能或数据结构,以供其他程序调用。 `ourhdr.h` 是...
C中的ourhdr.h C中的ourhdr.hC中的ourhdr.hC中的ourhdr.hC中的ourhdr.h
UNIX环境高级编程 里的 ourhdr.h!
当编译器报错"error: ourhdr.h: No such file or directory"时,意味着它无法找到该头文件,这通常是因为头文件不在编译路径中,或者没有正确地被包含到源文件中。解决这个问题的方法是确保"ourhdr.h"位于正确的目录...
3. **文件I/O**:Unix重视文件系统的使用,`ourhdr.h`可能会包含一些对文件操作的封装,如打开、关闭、读写文件等。 4. **信号处理**:Unix中的信号是进程间通信的一种方式,可以用于进程控制和异常处理。`ourhdr.h...
终于发现这个完整的文件然后把它全部打出来,已经调试没有错误,希望能对大家有帮助。
UNIX环境高级编程示例代码头文件 ourhdr.h。
它为标准C库提供了额外的便利宏和函数,通常用于简化Unix系统调用的使用。例如,`apue.h`可能包含错误处理宏、文件描述符管理函数、进程间通信的辅助函数等。使用这个头文件,开发者可以更轻松地处理诸如错误报告、...
`fdopen`用于将已存在的文件描述符转换为标准C库的FILE指针;`dup2`用于复制一个文件描述符到另一个描述符,常用于重定向I/O;`close_nullop`则是一个无操作的关闭文件描述符的函数,防止因关闭一个未打开的描述符而...
### 学习UNIX环境高级编程必用到的头文件ourhdr.h详解 #### 概述 在UNIX环境下的高级编程中,经常会用到一个自定义的头文件`ourhdr.h`。该头文件包含了多种宏定义、数据类型声明以及函数原型,旨在帮助程序员更好地...
- **运行**: 使用 `./a.out [path]` 来运行程序,其中 `[path]` 是要列出的目录路径。 - **输出样例**:程序输出可能包括列出的文件名、错误消息等。 以上就是从给定文件中提取出来的有关Unix环境高级编程的关键...
#include "ourhdr.h" int main(void) /* 44BSD version */ { struct passwd *ptr; if ( (ptr = getpwnam("stevens")) == NULL) err_sys("getpwnam error"); printf("pw_passwd = %s\n", ptr->pw_passwd...
在提供的文件列表中,"ourhdr.c" 可能是包含了使用"urhdr.h" 和 "apue.h" 的示例源代码文件。这个文件可能是书中的练习或者示例程序,展示了如何在实际项目中应用这两个头文件。 学习和理解"urhdr.h" 和 "apue.h" ...
《unix环境高级编程》里面的几乎所有的程序都用到的ourhdr.h,亲测可以使用,需哟啊的下载
- `selectpipe.c` 和 `pollpipe.c`:可能分别展示了如何使用`select`和`poll`函数处理管道(pipe)的非阻塞I/O。 - `ourhdr.h`:可能包含了一些自定义的头文件,定义了常量、结构体或函数原型。 - `Makefile`:包含...
在第二版中,作者将第一版中的`ourhdr.h`头文件更改为`upue.h`,这可能是为了更好地符合Unix编程的最新实践和标准,或者是为了与书中讲解的内容保持一致,提高代码的可读性和通用性。`error.c`文件则包含了书中提到...
`ourhdr.h`是一个头文件,它可能包含了一些通用的函数声明或常量定义,这些在书中的一些示例程序中可能会用到。学习者可以通过研究这个头文件来了解如何组织和使用自己的头文件,以提高代码的可读性和可维护性。 `...