首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

openat与open的区别及用法示例(dfd)

从2.6.16版本开始,GNU/Linux引入opeant系统调用: #define _XOPEN_SOURCE 700 /* Or define _POSIX_C_SOURCE >= 200809 *.../ #include int openat(int dirfd , const char * pathname , int flags , ... /* mode_t mode...参考kernel代码则一目了然: 引入openat(及其它at结尾的函数)有以下两个原因: First, openat() allows an application to avoid race conditions...引入openat是方便一个进程内的各线程可拥有不同的当前目录,传统的chdir会影响整个进程,而使用openat只需要每个线程在初始化时打开一个目录(调用open),然后就可以以openat在“当前目录...”操作文件了,如: int dirfd = open("/tmp"); // 相当于chdir到“/tmp” int filefd = openat(dirfd, "myfile"); // 在/tmp

63830
您找到你想要的搜索结果了吗?
是的
没有找到

eBPF 入门开发实践指南四:在 eBPF 中捕获进程打开文件的系统调用集合,使用全局变量过滤进程 pid

eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具,它允许开发者在内核运行时动态加载、更新和运行用户定义的代码。...并使用 SEC 宏把它们附加到 sys_enter_openat 的 tracepoint(即在进入 openat 系统调用时执行)。...这个函数通过使用 bpf_get_current_pid_tgid 函数获取调用 openat 系统调用的进程 ID,并使用 bpf_printk 函数在内核日志中打印出来。...SEC 宏把它们附加到 sys_enter_open 和 sys_enter_openat 两个 tracepoint 来捕获进程打开文件的系统调用。...我们可以使用 bpf_get_current_pid_tgid 函数获取调用 open 或 openat 系统调用的进程 ID,并使用 bpf_printk 函数在内核日志中打印出来。

1.8K10

eBPF 入门开发实践教程四:在 eBPF 中捕获进程打开文件的系统调用集合,使用全局变量过滤进程 pid

Linux 系统中,进程与文件之间的交互是通过系统调用来实现的。系统调用是用户态程序与内核态程序之间的接口,它们允许用户态程序请求内核执行特定操作。...在本教程中,我们关注的是 sys_openat 系统调用,它用于打开文件。当进程打开一个文件时,它会向内核发出 sys_openat 系统调用,并传递相关参数(例如文件路径、打开模式等)。...通过捕获 sys_openat 系统调用,我们可以了解进程在什么时候以及如何打开文件。...这里设为 0 表示捕获所有进程的 sys_openat 调用。...这个 tracepoint 会在进程发起 sys_openat 系统调用时触发。

39910

【云原生攻防研究】— runC再曝容器逃逸漏洞(CVE-2024-21626)

图1 runC操作cgroup中的openFile函数 图2 prepareOpenat2函数 Openat2是Linux kernel在5.6版本之后对Openat syscall的一个扩展,目的是为了让用户进行更细粒度的控制..., 这就导致了如果系统支持 Openat2,那么就会存在一个文件描述符泄漏(泄漏的文件描述符指向 /sys/fs/cgroup)的风险。...3.1 环境复现 runC版本:1.1.7 Docker版本:24.0.2 Linux 发行版:Ubuntu 18.04.6 LTS Linux内核版本:6.1.25-060125-generic(注意...5.6版本之前的Linux kernel不支持 openat2 这个 syscall 的,因此使用该版本之前的Kernel是无法成功复现该漏洞的[5]) 3.2 流程复现 攻击方式1:process.cwd...在容器中会产生 open/openat/openat2 syscall,且文件名具有 /proc/\d+/cwd/.* 的正则表达式特征。

34010

go语言调度器源代码情景分析之八:系统调用

另外,用户代码调用操作系统API也不是根据函数名直接调用,而是需要根据操作系统为每个API提供的一个整型编号来调用,AMD64 Linux平台约定在进行系统调用时使用rax寄存器存放系统调用编号,同时约定使用...以os.Open为例,它最终会执行下面这段汇编代码来通过openat系统调用打开文件: mov 0x10(%rsp),%rdi #第1个参数 mov 0x18(%rsp),%rsi #第...0x30(%rsp),%r8 #第5个参数 mov 0x38(%rsp),%r9 #第6个参数 mov 0x8(%rsp),%rax #系统调用编号 rax = 267,表示调用openat...系统调用 syscall #系统调用指令,进入Linux内核 这里,代码首先把6个参数以及openat这个系统调用的编号267保存在了对应的寄存器中,

64940

【eBPF笔记前篇】介绍、开发环境搭建、原理简介、case

动态追踪:bcc、bpftrace 观测监控:Pixie、Hubble、kubectl-trace 网络:Cilium、Katran 安全:Falco、Tracee 二、开发环境搭建 linux环境:...-$(uname -r) linux-headers-$(uname -r) 三、原理简介 pbf系统在eBPF诞生后,成为了内核的一个顶级子系统 BPF的设计?.../openat2.h> #include // 定义数据结构 struct data_t { u32 pid; u64 ts; char comm[TASK_COMM_LEN...from bcc import BPF # 1) load BPF program b = BPF(src_file="hello.c") b.attach_kprobe(event="do_sys_openat2...eBPF 程序并挂载到内核探针上; 第 2) 处则是输出一行 Header 字符串表示数据的格式; 第 3) 处的 print_event 定义一个数据处理的回调函数,打印进程的名字、PID 以及它调用 openat

3.8K31

Linux|IO|File IO源码剖析

Reference: The Linux Programming Interface: Chapter 4/14/15, Kernel/fs 通用接口 通用IO包含open/read/write/close...(dfd, filename, &how); } do_sys_openat2 - 通过open_how获取open_flags static long do_sys_openat2(int dfd,...fsync(fd)强制其刷新到磁盘上 fdatasync(fd)不刷新metadata的时间戳 sync()刷新所有的缓冲区(Linux要求等待所有操作完成才能返回)。...因为这个原因,写操作并不能实时的进行持久化,需要linux使用journal机制来保证文件系统的崩溃一致性,然而journal机制本身又需要进行flush。...通过间接层处理空洞 - 当我们进行SEEK_END时,END到当前的pos会存在空洞,那么Linux并不会为空洞分配block存储,空洞通过为inode系统中的指针打上标记0表明其并未指向实际磁盘块即可

3.6K30

【Nginx11】Nginx学习:HTTP核心模块(八)文件处理

directio size | off; 具体的做法是, 在 FreeBSD 或 Linux 系统开启使用 O_DIRECT 标志, 在 Mac OS X 系统开启使用 F_NOCACHE 标志, 在...它在处理大文件时 directio 4m; 或者在 Linux 系统使用 aio 时比较有用。默认 off 。 directio_alignment 为 DirectIO 设置文件偏移量对齐。...directio_alignment size; 大多数情况下,按512字节对齐足矣, 但在 Linux 系统下使用 XFS ,需要将值扩大到 4K 。 文件优化缓存 这个缓存是个什么东西呢?...sendfile on | off; 现在默认就是打开的,从 nginx 0.8.12 和 FreeBSD 5.2.1 开始,可以使用 aio 预加载 sendfile的数据,Linux 没有哦。...这条指令在Linux、Solaris和Windows操作系统无效。 sendfile_max_chunk 设置为非0值时,可以限制在一次 sendfile() 调用时传输的数据量。

16911
领券