存档

文章标签 ‘UNIX环境高级编程’

UNIX环境高级编程学习笔记(中)

2013年5月1日 没有评论

---

此文作者:冰镇南瓜汁;mail:munantv@qq.com

进程环境

常用函数:

<unistd.h>

void _exit(int status);

<stdlib.h>


void exit(int status);
void _Exit(int status);

正常终止程序,_Exit和_exit立即进入内核,exit要先执行清理工作(包括关闭所有打开的流,以及调用终止处理程序)。

int atexit(void (*func)(void));

登记终止处理函数,这些函数会被exit自动调用,调用的顺序与登记的顺序相反,登记多次会导致调用多次。成功返回0,出错返回非0值。


void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, size_t newsize);
void free(void *ptr);

malloc(memory allocation)分配指定字节数的存储区,初始值不定。calloc为指定大小指定个数的元素分配存储区,每一个位置都初始化为0。realloc更改以前分配区的长度。free释放ptr指向的存储空间。

阅读全文...

UNIX环境高级编程学习笔记(上)

2013年4月19日 没有评论

---

此文作者:冰镇南瓜汁;mail:munantv@qq.com

文件I/O

常用函数:

<fcntl.h>

int open(const char *pathname, int oflag, ... /* mode_t mode */); 

打开或创建一个文件。第一个参数是文件的名字,第二个参数是选项,在O_RDONLY / O_WRONLY / O_RDWR 中选择一个打开的方式,然后可以用或运算指定额外的一些选项(例如O_APPEND写时追加到文件 尾,O_CREAT若文件不存在则创建,O_TRUNC文件截短为0等),第三个参数是创建新文件的访问权限位。返回值是当前最小的未用文件描述符,用于 该文件,出错返回-1。

int creat(const char *pathname, mode_t mode); 

创建一个新文件,等效于 open(pathname, O_WRONLY | O_CREATE | O_TRUNC, mode);

int fcntl(int filedes, int cmd, ... /* int arg */ ); 

改变一个文件的性质。其中cmd的选项包括:F_DUPFD(复制一个现有的描述符,第三个参数为描述符数值的下限)、F_GETFD(获得文件描述符标 志)、F_SETFD(设置文件描述符标志,值为第三个参数)、F_GETFL(获得文件状态标志,可以与O_ACCMODE进行与运算,然后与三种访问 方式标志比较,可以与其他标志进行与运算判断标志位的存在)、F_SETFL(设置文件状态标志,设置为第三个参数,通常先取得现有的标志,然后用或运算 添加标志,用补码的与运算删除标志)、F_GETOWN、F_SETOWN(异步I/O所有权)、F_GETLK、F_SETLK、F_SETLKW(记 录锁)。出错返回-1。
常见的用法:(错误处理略去)val = fcntl(fd, F_GETFL, 0); val |= flags; fcntl(fd, F_SETFL, val);

<unistd.h>

int close(int filedes); 

根据文件描述符filedes关闭已打开的该文件并释放该进程加在该文件上的所有记录锁,成功返回0,出错返回-1。

off_t lseek(int filedes, off_t offset, int whence); 

为一个打开的文件设置偏移量,whence可以取SEEK_SET(距离文件开始处offset字节)、SEEK_CUR(当前值加offset)、SEEK_END(文件长度加offset),成功时返回新的文件偏移量,出错返回-1。

ssize_t read(int filedes, void *buf, size_t nbytes); 

阅读全文...