发布时间:2013-05-10 16:35:29
内核负责维护进程表。每个进程在其中都有记录。每个进程表中有个打开的文件描述符表。它记录了该文件描述符的标志和文件表指针。文件表中存放了该文件的当前偏移量。文件状态标志,引用计数,v节点指针(linux中用的是与文件系统无关的i节点)。当文件表中的引用计数为零时,该文件就会被关闭。我们知道dup用来复制一个描.........【阅读全文】
发布时间:2013-05-08 19:29:36
对于进程间对同一文件访问的同步问题。fcntl提供了一种记录锁的方法int fcntl(int filedes,int cmd,.../*arg*/)对于记录锁,cmd是F_GETLK ,F_SETLK和 F_SETLKW。第三个参数是一个指向flock结构的指针flock依赖于具体的实现,但它至少包含以下成员struct flock{shortl_type;/* F_RDLCK F_WRLCK F_UNL.........【阅读全文】
发布时间:2013-05-07 11:27:02
这里我们需要先说明一下,我们这里所说的文件共享并不是一般意义上的两个进程可以对同一个文件进行读写。而是共享同一个文件表。就是说这个文件的当前偏移量。文件状态标志等信息是共享的。下面我们就具体介绍这种共享。我们还要说明一下unix内核中关于打开文件的内核数据结构。中给出了们的关系模型.........【阅读全文】
发布时间:2013-05-06 21:32:53
FIFO(命名管道)是一种文件类型。所以可以用open()函数来打开它。O_NONBLOCK就是和FIFO息息相关的一个打开标志。我们可以用mkdifo(const char *pathname ,mode_t mode)来创建一个FIFO,然后就可以用opne()函数来打开了。当打开一个FIFO是 O_NONBLOCK 产生的影响如下: 1若没有这个标志,以只读方式打开的.........【阅读全文】
发布时间:2013-05-05 16:37:31
在介绍open函数时,我们详细介绍过O_EXCL标志的作用。它和O_CREAT一起作用时,就会先测试需要创建的文件在不在,不在就会创建该文件。如果存在,就出错返回。但这里的测试和出错是一个原子操作。什么意思呢,就是说测试和创建是一个不可分割的步骤,他们要么都不执行,要么就都执行。不会发生测试完后,cpu切换到另一.........【阅读全文】