> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/man9/vop_openclose.9.md).

# VOP\_OPENCLOSE.9

`VOP_OPEN` — 打开或关闭文件

## 名称

`VOP_OPEN`, `VOP_CLOSE`

## 概要

```c
#include <sys/param.h>
#include <sys/vnode.h>
```

```c
int
VOP_OPEN(struct vnode *vp, int mode, struct ucred *cred,
    struct thread *td, struct file *fp)

int
VOP_CLOSE(struct vnode *vp, int mode, struct ucred *cred,
    struct thread *td)
```

## 描述

`VOP_OPEN` 入口点在进程访问文件之前调用，`VOP_CLOSE` 入口点在进程完成文件使用后调用。

参数如下：

**`vp`** 文件的 vnode。

**`mode`** 调用进程所需的访问模式。

**`cred`** 调用者的凭证。

**`td`** 正在访问文件的线程。

**`fp`** 正在打开的文件。

指向文件 `fp` 的指针对于需要此类信息的文件系统非常有用，例如 fdescfs(5)。对于内核内部打开操作，使用 `NULL` 作为 `VOP_OPEN` 的 `fp` 参数。

访问模式是一组标志，包括 `FREAD`、`FWRITE`、`O_NONBLOCK`、`O_APPEND`。

传递给 `VOP_CLOSE` 的线程 `td` 可以为 `NULL`，如果对打开文件的最后一个引用是从内核上下文中释放的，例如在 `SCM_RIGHTS` 消息中包含文件引用的套接字缓冲区被销毁时。

## 锁定

`VOP_OPEN` 要求 `vp` 在进入时已锁定，并在返回时保持锁定状态。

`VOP_CLOSE` 要求至少有一个引用与 vnode 关联，且不关心 vnode 是否已锁定。锁和引用状态在返回时保持不变。注意，`vn_close` 需要一个未锁定但已引用的 vnode，并在返回前减少 vnode 的引用。

## 返回值

成功时返回零，否则返回错误代码。

## 参见

[vnode(9)](/man/man9/vnode.9.md), [VOP\_LOOKUP(9)](/man/man9/vop_lookup.9.md)

## 作者

本手册页面由 Doug Rabson 编写。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man9/vop_openclose.9.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
