
apue
wusoule
这个作者很懒,什么都没留下…
展开
-
apue程序清单3-1
这个程序虽小,小中见大嘛。主要是理解重定向符号和管道的概念。(八过,概念的理解是建立在代码的基础上)#include "apue.h"int main(void){ if (lseek(STDIN_FILENO, 0, SEEK_CUR) == -1) printf("cannot seek\n"); else printf("seek原创 2013-04-14 21:09:09 · 861 阅读 · 0 评论 -
apue-mmap
mmap:的作用把文件映射到内存里,可以实现的效果是,对此块内存的操作即可以达到对此文件的操作。因为mmap映射到的内存,是虚拟内存(一般512)的整数倍,可能超过实际的文件长度。但是,如果你对超过文件长度的那部分进行写的话,这些多余的写是 不会增加到文件里。看一个实验:我们传入的文件是1.txt。内容只有10个字节。是1111111111.#include #include原创 2013-04-17 11:58:53 · 861 阅读 · 0 评论 -
apue-alarm和pause函数,关于信号
题记:这里主要是用alarm和pause来实现sleep函数。会分析其中存在的bug,会很精辟。当然,大牛的恩赐啦~~不然我介些小生怎看到如此的经典呢?!1实现sleep1.1一个含有3个BUG的sleep的实现#include #include static void sig_alrm(int signo){}unsigned int slee原创 2013-04-16 14:58:13 · 1205 阅读 · 4 评论 -
apue-信号相关概念
1,genercation:信号产生2,delivery:信号递送3,pending:处于generation和delivery之间那段时间。处于阻塞阶段。通过sigpending来了解。4,signal mask:被屏蔽的信号。处于阻塞状态。通过sigprocmask来了解。原创 2013-04-16 14:07:40 · 929 阅读 · 0 评论 -
apue-信号的恢复和继承
1,signal的恢复exec系列signal.c#include #include #include void handler(int s){ printf("hello\n");}int main(){ signal(SIGINT, handler); execl("./test", NULL); return 0;}编译:gcc原创 2013-04-16 13:24:48 · 914 阅读 · 0 评论 -
apue-局部变量的错误
#include #define DATAFILE "datafile"FILE *open_data(void){ FILE *fp; char databuf[BUFSIZ]; if ((fp = fopen(DATAFILE), "r")) == NULL) return NULL; if (setvbuf(fp, databuf, _IOLBF, BUFSI原创 2013-04-16 10:26:55 · 889 阅读 · 0 评论 -
apue-setjmp,longjmp
编程模型:#include static jmp_buf jmpbuffer; //最好设置为全局变量main(){ if (setjmp(jmpbuffer) != 0) { ... } f1();}f1() { f2();}f2() { if () { longjmp(jmpbuffer, 1); //这里的1会返回到setjmp中 }}原创 2013-04-16 10:23:15 · 1009 阅读 · 0 评论 -
apue-手贱还是想谢谢信号未决pending
#include #include static void sig_quit(int);int main(void){ sigset_t newmask, oldmask, pendmask; if (signal(SIGQUIT, sig_quit) == SIG_ERR) printf("%m\n"), exit(-1); sigemptyset(&newmask);原创 2013-04-16 16:04:11 · 964 阅读 · 0 评论 -
apue进程那些事儿
1,进程的退出a,exit系列函数。exit相较于_Exit,_exit的区别是,会在进入内核前关闭所有打开的文件,这会造成数据被刷到磁盘上。b,atexit函数函数原型:int atexit(void (*func)(void));在进程结束的时候,会把注册的函数执行一遍。执行的顺序和注册的顺序相反的。2,进程的环境表原创 2013-04-15 16:10:46 · 740 阅读 · 0 评论 -
apue文件的原子性操作
O_APPEND:防止程序在“定位文件尾,然后写的时候”出现问题。O_APPEND每次在写之前都会重新定位到文件尾。pread pwrite1,无法终端pread的定位和读操作2,不会更新文件指针O_CREAT,O_EXCL"判断如果文件不存在,然后在创建“原创 2013-04-15 12:34:41 · 848 阅读 · 0 评论 -
apue文件环境
内核用三种数据结构描述一个打开的文件:1,进程表项a,文件描述符标志(close_on_exec)b,指向文件表的指针2,内核为打开的文件维持一张文件表a,文件状态标志(读,写,添写,同步和非阻塞等)b,当前文件偏移量c,指向v节点表的指针3,每个打开的文件都有一个v节点结构。包括了:a,文件所有者原创 2013-04-14 22:52:54 · 803 阅读 · 0 评论 -
apue有点激动的写下这个大神的东东,膜拜您啊!!
#include #include int glob = 6;char buf[] = "a write to stdout\n";int main(){ int var; pid_t pid; var = 88; if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1) printf("%m\n原创 2013-04-16 11:02:12 · 978 阅读 · 0 评论