- 博客(360)
- 资源 (7)
- 收藏
- 关注
原创 getdents系统调用及示例
getdents系统调用是Linux中用于读取目录内容的底层函数,返回原始目录项结构需手动解析。其函数原型为int getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count),参数包括目录文件描述符、存储缓冲区和大小。成功返回读取字节数,失败返回-1并设置errno。相比标准库的readdir(),getdents更底层但更灵活。示例代码展示了如何用getdents读取当前目录内容,创建测试环境并对比readdir,解析目
2025-09-09 23:16:17
553
原创 getegid系统调用及示例
getegid 是 Linux 系统调用,用于获取当前进程的有效组 ID(Effective Group ID),该 ID 决定进程对文件和资源的组级访问权限。函数原型为 gid_t getegid(void),无参数且总是成功返回有效组 ID。相关函数包括 getgid()(获取真实组 ID)、geteuid()(获取有效用户 ID)等。示例代码展示了如何获取和显示组 ID 信息、进行组切换以及获取补充组列表。有效组 ID 是 Linux 权限系统中重要的标识符之一,用于确定进程的访问权限级别。
2025-09-09 23:11:57
791
原创 geteuid系统调用及示例
geteuid是Linux系统调用,用于获取进程的有效用户ID(Effective User ID)。有效用户ID决定了进程的权限级别,与真实用户ID(实际所属用户)不同。函数原型为uid_t geteuid(void),无参数且总是成功返回有效用户ID。系统还提供相关函数如getuid、getgid等。进程通常有三种用户ID:真实ID、有效ID和保存的设置ID。示例代码展示了如何获取并区分这些ID,以及进行权限检查和安全操作。当有效UID为0时表示具有root权限,程序应谨慎处理特权操作并及时降权。
2025-09-09 23:06:33
763
原创 getgid系统调用及示例
getgid 是 Linux 系统中获取进程真实组 ID 的系统调用函数,用于确定进程的组权限级别。该函数无参数,总是成功返回调用进程的真实组 ID(gid_t 类型)。组 ID 类似于"部门编号",决定进程在系统中的组权限。系统还提供相关函数如 getegid(获取有效组 ID)、getuid(获取用户 ID)等。示例代码演示了如何获取组 ID 信息、查询完整用户/组信息以及检查权限状态。真实组 ID 和有效组 ID 通常相同,但在特殊权限操作时可能不同。
2025-09-09 23:02:18
530
原创 getgroups系统调用及示例
getgroups 是 Linux 系统调用,用于获取当前进程的补充组 ID 列表。该函数需要传入缓冲区大小和数组指针,返回补充组数量或填充的组 ID 数量。主要功能包括:查询进程所属的补充组(除主组外的其他组),支持先获取组数量再分配内存填充,并可与getgid()获取的主组 ID 对比。典型用法是两次调用:第一次获取数量,第二次填充数组。错误处理需注意缓冲区不足(EINVAL)和无效指针(EFAULT)等情况。相关函数包括setgroups()、initgroups()等组管理函数。
2025-09-09 22:58:45
775
原创 getitimer系统调用及示例
本文介绍了 Linux 系统编程中的间隔计时器函数 getitimer 和 setitimer,它们用于管理和控制进程的定时器。这些计时器可以在指定时间后产生信号(如 SIGALRM),实现定时执行代码或测量程序执行时间等功能。setitimer 设置计时器的超时时间和重载时间,支持三种类型:ITIMER_REAL(实时)、ITIMER_VIRTUAL(用户态 CPU 时间)和 ITIMER_PROF(总 CPU 时间)。getitimer 则获取计时器的当前状态。文章还提供了示例代码,演示如何使用 ITI
2025-09-09 22:54:59
907
原创 getmsg系统调用及示例
getmsg是System V STREAMS接口中的消息接收函数,用于从STREAMS设备或管道中获取消息。该函数通过strbuf结构体分别接收控制信息和数据信息,支持普通和高优先级两种消息类型。函数原型为int getmsg(int fildes, struct strbuf *ctlptr, struct strbuf *dataptr, int *flagsp),其中flags参数指定接收模式和返回消息类型。虽然现代Linux系统中STREAMS使用较少,但在某些Unix系统(如Solaris)中仍
2025-09-09 22:50:43
686
原创 getpeername系统调用及示例
getpeername是Linux系统调用,用于获取已连接套接字的对端地址信息(IP和端口)。它类似于查看已接通电话的对方号码,适用于服务器获取客户端地址、客户端确认服务器地址等场景。函数原型为int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen),成功返回0并填充地址结构,失败返回-1并设置errno。常与getsockname(获取本端地址)配合使用,示例展示了TCP客户端如何通过getpeername验证连接到的服务
2025-09-09 22:47:38
1119
原创 getpmsg系统调用及示例
getpmsg 是 System V STREAMS 接口中的函数,用于从 STREAMS 设备接收带优先级的消息。该函数允许按优先级(band)接收消息,支持多种接收模式(MSG_HIPRI/MSG_ANY/MSG_BAND)。参数包括文件描述符、控制/数据缓冲区结构(strbuf)以及优先级/标志指针。函数返回0表示成功,-1表示失败并设置errno。示例代码展示了基础用法和模拟实现,但需注意Linux系统对STREAMS的支持有限。关联函数包括putpmsg、getmsg等,常用于消息优先级处理场景。
2025-09-09 22:44:45
589
原创 getppid系统调用及示例
getppid是Linux系统调用,用于获取当前进程的父进程ID(PPID)。该函数无需参数,总是成功返回父进程ID,在进程管理和监控中非常有用。示例代码展示了基础用法、父子进程关系、孤儿进程现象以及构建进程树结构,通过getpid()、fork()等相关函数配合使用,可完整呈现Unix/Linux的进程层级关系。当父进程终止后,子进程PPID会变为1(init进程),成为孤儿进程。
2025-09-09 22:37:04
982
原创 getpriority系统调用及示例
getpriority 是 Linux 系统调用,用于查询进程、进程组或用户的调度优先级。优先级范围 -20(最高)到 +19(最低)。函数原型为 int getpriority(int which, id_t who),参数 which 指定查询类型(PRIO_PROCESS/PRIO_PGRP/PRIO_USER),who 为对应 ID。成功返回优先级值,失败返回 -1 并设置 errno。需注意返回值可能为 -1(成功时),应先清除 errno 再调用。示例代码展示了如何获取当前进程、进程组和用户的优
2025-09-09 22:33:21
851
原创 getrandom系统调用及示例
getrandom是Linux系统中获取高质量随机数的系统调用,从内核熵池中提取真正的随机数据。它比传统rand()更安全可靠,适用于加密、安全令牌等场景。函数原型为ssize_t getrandom(void *buf, size_t buflen, unsigned int flags),支持GRND_RANDOM(阻塞模式)和GRND_NONBLOCK(非阻塞模式)两种标志位。文章详细介绍了函数参数、返回值、错误处理和示例代码,展示了如何生成随机数据和使用不同标志位。getrandom相比传统随机数设
2025-09-09 22:30:37
1130
原创 getresgid系统调用及示例
getresgid 是 Linux 系统调用,用于获取进程的组 ID 三元组(真实组 ID、有效组 ID 和保存的组 ID)。该函数通过三个 gid_t* 参数返回 ID 值,成功时返回 0,失败返回 -1 并设置 errno。典型用法是检查进程权限状态,常与 getresuid 配合使用。示例代码展示了如何获取并分析这些 ID,包括错误处理和权限切换能力检测。该函数在需要精细控制进程权限时非常有用,特别是在特权程序设计中。
2025-09-09 22:26:50
1020
原创 getresuid系统调用及示例
getresuid和getresgid是Linux系统调用,用于获取进程的用户和组ID信息。getresuid获取真实用户ID、有效用户ID和保存的设置用户ID;getresgid获取对应的组ID。两者都通过指针参数返回三个ID值,成功返回0,失败返回-1并设置errno。示例代码展示了如何获取并分析这些ID信息,包括错误处理和权限状态分析。相关函数包括getuid、setuid等用于用户/组ID管理的系统调用。
2025-09-09 22:21:49
864
原创 fstatfs系统调用及示例
fstatfs是Linux系统中用于获取文件系统统计信息的系统调用,通过文件描述符返回包含文件系统类型、块大小、总空间、可用空间等详细信息的statfs结构体。该函数类似于"文件系统体检工具",可用于检测文件系统状态和空间使用情况。其关联函数包括statfs(路径方式)、statvfs(POSIX标准)等。示例代码展示了如何获取文件系统空间信息(转换为GB显示)和识别常见文件系统类型(如ext4、XFS等)。调用失败时返回-1并设置errno,常见错误包括无效文件描述符(EBADF)或I
2025-09-08 22:21:31
1165
原创 fstat系统调用及示例
fstat是Linux系统调用,用于通过文件描述符获取文件状态信息,避免了路径操作可能引发的竞态问题。该函数返回包括文件类型、大小、权限、时间戳等元数据,存储在stat结构体中。其函数原型为int fstat(int fd, struct stat *buf),成功返回0,失败返回-1并设置errno。常见错误包括无效描述符(EBADF)和内存不足(ENOMEM)。与stat通过路径获取信息不同,fstat更适用于多线程环境。示例代码展示了如何获取文件基本信息、类型判断和错误处理,适用于普通文件、目录等各类
2025-09-08 22:16:18
702
原创 fsync系统调用及示例
fsync函数是确保文件数据持久化的重要系统调用,它会强制将文件数据和元数据写入磁盘。示例代码展示了fsync的基本使用、性能影响(同步操作显著降低写入速度但保证数据安全)、错误处理(无效文件描述符、只读文件等情况)以及数据安全重要性(特别对关键数据应使用fsync)。函数原型为int fsync(int fd),成功返回0,失败返回-1并设置errno。类似功能函数还有fdatasync、sync和msync等。
2025-09-08 22:08:50
379
原创 ftruncate系统调用及示例
ftruncate系统调用用于将已打开的文件截断到指定长度。与truncate不同,ftruncate通过文件描述符而不是文件路径来操作文件,这在某些情况下更加高效和安全。
2025-09-08 22:04:48
252
原创 get_kernel_syms系统调用及示例
摘要:get_kernel_syms 是已废弃的 Linux 系统调用,用于获取内核符号表信息。它通过填充 kernel_sym 结构体数组返回符号地址和名称,需要特权权限。现代内核已移除该调用,推荐使用 /proc/kallsyms 或 /boot/System.map 作为替代方案。示例代码展示了如何检查系统支持性及传统用法,并提供了读取 /proc/kallsyms 的现代实现方式。该接口主要用于内核调试和模块加载,但在新系统中应避免使用。
2025-09-08 21:04:54
616
原创 futimesat系统调用及示例
futimens 是 Linux 系统调用,用于通过文件描述符精确设置文件时间戳(访问时间和修改时间),支持纳秒级精度和特殊时间值(UTIME_NOW/UTIME_OMIT)。相比传统函数更安全,避免了路径操作导致的竞态条件。需包含 <fcntl.h> 或 <sys/stat.h> 头文件,参数包括文件描述符和时间结构体数组。常用于文件备份、时间戳修改等场景,与 utimensat、utimes 等函数功能相似但实现方式不同。
2025-09-08 21:02:05
708
原创 get_mempolicy系统调用及示例
get_mempolicy 是 Linux 系统中用于查询 NUMA 内存分配策略的系统调用,可获取进程或指定内存区域的 NUMA 节点分配策略。该函数支持查询默认策略、特定地址策略及允许使用的 NUMA 节点集合,适用于优化多核 NUMA 架构下的内存访问性能。函数通过 mode 参数返回策略类型(如默认、优先节点、绑定节点等),nodemask 返回节点掩码,flags 控制查询行为。典型应用场景包括高性能计算和大内存应用,需配合 set_mempolicy 和 mbind 等函数使用。
2025-09-08 20:57:58
963
原创 get_robust_list系统调用及示例
get_robust_list 是 Linux 系统调用,用于获取进程的健壮互斥锁列表。健壮互斥锁(robust futex)能在持有锁的进程异常终止时自动清理锁状态,防止死锁。该函数通过进程 ID 获取锁列表头指针和长度,需配合 set_robust_list 和相关 pthread 函数使用。示例代码展示了如何获取当前进程的健壮列表及健壮互斥锁的实际应用场景,包括检测锁持有者死亡后的恢复处理。此机制主要用于解决多线程程序中因线程崩溃导致的无限阻塞问题。
2025-09-08 20:53:31
930
原创 get_thread_area系统调用及示例
get_thread_area是Linux系统中用于获取线程本地存储(TLS)描述符的系统调用,主要用于i386架构。该调用允许查询线程特定的存储区域配置,通过user_desc结构体返回条目号、基地址、大小限制等TLS信息。在现代64位系统中,该功能通常被arch_prctl或标准的TLS机制替代。示例代码展示了在32位和64位系统上查询TLS信息的不同方法,以及使用__thread关键字定义线程局部变量的实践。
2025-09-08 20:50:25
947
原创 getcpu系统调用及示例
getcpu 是 Linux 系统调用,用于获取当前线程运行的 CPU 核心编号和 NUMA 节点编号。该函数原型为 long getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache),成功返回 0,失败返回 -1 并设置 errno。主要用于性能优化和负载均衡场景,可通过 syscall() 调用或 glibc 2.29+ 直接使用。文中提供了三个示例代码:基本使用、glibc 的 sched_getcpu 替代方案,以及 CPU
2025-09-08 20:48:12
850
原创 getcwd系统调用及示例
getcwd系统调用用于获取进程当前工作目录的绝对路径。该函数接受缓冲区和大小参数,成功时返回路径字符串,失败返回NULL并设置errno。示例代码演示了基本用法、缓冲区处理、目录切换及错误处理。典型应用场景包括定位程序配置文件等。配套函数chdir()可用于改变工作目录。使用时需注意缓冲区大小限制和内存管理。
2025-09-08 20:47:05
246
原创 getdents64系统调用及示例
getdents64 是 Linux 系统底层目录扫描函数,用于高效读取目录内容。它直接与内核交互,返回包含文件名、inode号、文件类型等信息的原始目录项数据。相比高级接口如 readdir,getdents64 提供了更高的灵活性和性能。使用时需提供目录文件描述符、缓冲区和大小参数,返回实际读取字节数或错误码。该函数常用于需要精细控制目录扫描的场景,如文件系统工具开发。示例代码展示了如何用 getdents64 实现目录内容扫描和文件类型统计功能。
2025-09-08 20:44:52
667
原创 fremovexattr系统调用及示例
Linux系统调用fremovexattr通过文件描述符删除文件的扩展属性,避免路径操作中的竞态条件。该函数原型为int fremovexattr(int fd, const char *name),成功返回0,失败返回-1并设置errno。扩展属性是以键值对存储的元数据,删除时需指定完整属性名(如"user.my_attribute")。常见错误包括EBADF(无效描述符)、ENODATA(属性不存在)等。关联函数包括fsetxattr(设置属性)、fgetxattr(获取属性)等。示
2025-09-08 20:40:26
700
原创 flock系统调用及示例
flock是Linux系统中用于文件加锁的系统调用,通过共享锁(LOCK_SH)和排他锁(LOCK_EX)实现进程间文件访问同步。其函数原型为int flock(int fd, int operation),支持阻塞和非阻塞模式(LOCK_NB)。典型应用场景包括:防止多进程同时修改文件、保证数据一致性等。示例代码演示了基本锁操作、多进程同步等用法,同时展示了错误处理方式。flock与fcntl()、lockf()等函数功能类似,但实现机制不同。该锁是建议性锁,需所有进程遵守加锁约定才有效。
2025-09-08 20:36:34
316
原创 fork系统调用及示例
fork是Unix/Linux系统中最基本的进程创建系统调用,用于创建一个调用进程(父进程)的副本(子进程)。其特点是"一次调用,两次返回":父进程中返回子进程PID,子进程中返回0。子进程继承父进程的代码段、数据段、堆栈、文件描述符等状态,之后两者独立执行。典型应用场景包括多进程编程,常与wait、exec等函数配合使用。示例代码展示了如何创建单个子进程和多个子进程,并通过返回值区分父子进程的执行路径。fork是实现Unix多任务的基础,广泛用于服务器、shell等程序。
2025-09-06 21:44:10
1141
原创 flock系统调用及示例
flock是Linux系统调用,用于对文件进行加锁操作,实现进程间文件访问同步。主要功能包括:获取共享锁(LOCK_SH)允许多进程并发读,获取排他锁(LOCK_EX)保证单进程独占写,以及解锁(LOCK_UN)。支持非阻塞模式(LOCK_NB)。通过示例演示了:1)基本排他锁操作;2)共享锁读取;3)非阻塞获取锁失败场景;4)多进程通过文件锁实现互斥访问。典型错误包括EAGAIN(锁被占用)、EBADF(无效文件描述符)等。相比fcntl(),flock提供更简单的文件锁接口,适用于进程间文件同步场景。
2025-09-06 21:37:17
358
原创 pkey_mprotect系统调用及示例
这篇文章深入介绍了Linux系统中的pkey_mprotect系统调用,它是比传统mprotect更细粒度的内存保护机制。主要内容包括: 功能原理:通过Memory Protection Keys (MPK)机制,将内存区域与保护密钥关联,实现硬件加速的线程级访问控制。即使有mprotect权限,若线程的密钥权限掩码(PKRU)禁止,访问仍会失败。 关键特性: 需要页对齐地址 支持PROT_READ/WRITE/EXEC权限组合 可绑定0-15的保护密钥 典型应用:安全沙箱、调试器保护关键数据、高性能库的内
2025-09-06 21:34:05
1114
原创 pkey_alloc系统调用及示例
Linux系统编程中的pkey_alloc和pkey_free函数用于管理内存保护键(MPK)。pkey_alloc申请一个0-15范围内的保护键编号,pkey_free释放已分配的保护键。这些函数需要较新的Linux内核(4.9+)和glibc(2.27+)支持,主要用于实现细粒度的内存访问控制,通过快速修改PKRU寄存器来切换权限,无需遍历页表。使用前需检查系统支持情况,示例代码演示了基本用法和错误处理。MPK特性特别适用于需要频繁切换内存保护权限的高性能应用场景。
2025-09-06 21:27:50
810
原创 poll系统调用及示例
poll 是 Linux 系统编程中用于 I/O 多路复用的关键函数,允许进程同时监视多个文件描述符的就绪状态(可读/可写/异常)。相比 select,poll 没有文件描述符数量限制,使用更灵活。函数原型为 int poll(struct pollfd *fds, nfds_t nfds, int timeout),通过 pollfd 结构体数组指定要监视的文件描述符和事件。典型应用场景包括网络服务器同时处理多个客户端连接。poll 在大量连接时性能不如 epoll,但跨平台性更好。示例代码展示了如何同时
2025-09-06 21:22:31
829
原创 ppoll系统调用及示例
ppoll函数是Linux系统中用于监视多个文件描述符状态变化的系统调用,它结合了poll功能和信号处理能力。文章详细介绍了ppoll的函数原型、参数说明、pollfd结构体定义、事件类型、返回值及常见错误码。通过示例代码展示了如何使用ppoll监视标准输入和定时器,包括信号处理设置、pollfd结构初始化、超时时间配置等关键步骤。ppoll相比传统poll提供了更好的信号处理机制,可以避免信号处理中的重入问题,适合需要同时处理I/O事件和信号的应用场景。
2025-09-06 21:13:52
964
原创 prctl系统调用及示例
prctl是Linux系统中用于进程控制的多功能系统调用,提供了丰富的进程属性管理功能。通过prctl可以设置进程名称、控制核心转储权限、管理父进程死亡信号等安全属性。其函数原型包含一个option参数和多个可选参数,option决定了具体操作类型。常用选项包括PR_SET_NAME(设置进程名)、PR_SET_DUMPABLE(控制核心转储)、PR_SET_PDEATHSIG(设置父进程死亡信号)等。prctl成功返回0,失败返回-1并设置errno。示例代码展示了设置进程名称、安全控制等典型用法,体现了
2025-09-06 18:35:49
947
原创 pivot_root系统调用及示例
pivot_root是Linux系统中用于切换根文件系统的关键系统调用。它通过交换当前根文件系统与另一个挂载的文件系统(new_root),并将旧根文件系统移动到指定目录(put_old)来实现系统环境的完全切换。与chroot不同,pivot_root影响整个系统的所有进程。该调用主要用于系统启动过程(如从initramfs切换到真实根文件系统)、系统恢复和容器技术。使用时需满足严格条件:new_root必须是已挂载的文件系统,put_old必须位于新根文件系统内,且调用进程需具有CAP_SYS_ADMI
2025-09-06 18:28:06
759
原创 pselect6系统调用及示例
pselect6是Linux内核中pselect系统调用的底层实现,应用程序应使用标准库提供的pselect函数。该函数用于监视多个文件描述符状态,相比传统select具有纳秒级超时精度和原子信号处理能力。示例代码演示了标准pselect的使用方法,包括文件描述符集合初始化、超时设置和信号屏蔽。文章对比了pselect与select的差异,指出pselect更适合需要信号安全的应用场景,同时强调实际开发中应注意文件描述符数量限制(FD_SETSIZE)、超时修改等问题。最后提供了编译选项和系统要求检查方法,
2025-09-06 18:09:29
865
原创 pselect系统调用及示例
Linux高级I/O多路复用系统调用pselect详解:pselect是Linux中用于高效监视多个文件描述符的系统调用,相比传统select具有更精确的超时控制(纳秒级)和原子信号处理能力。其函数原型接受文件描述符集合、超时结构体和信号屏蔽集参数,可同时检测可读、可写及异常事件。典型应用场景包括网络服务器、实时系统和需要精确时间控制的程序。示例代码展示了基础用法(监视标准输入)和高级用法(多文件描述符监视),重点演示了其原子信号处理、精确超时和避免竞态条件等核心特性。
2025-09-06 18:05:02
426
原创 ptrace系统调用及示例
摘要:本文详细介绍了Linux系统的ptrace系统调用,它允许一个进程(跟踪者)监控和控制另一个进程(被跟踪者)。文章涵盖函数原型、参数说明、操作类型(如PTRACE_TRACEME、PTRACE_ATTACH等)、返回值处理和常见错误码,并解释了被跟踪进程的状态变化机制。最后提供示例代码演示如何跟踪子进程系统调用,包括寄存器读取和系统调用名称转换功能。ptrace是调试器、系统调用跟踪和安全监控等工具的核心实现基础。
2025-09-06 18:01:43
985
roce+RROCE.pcap
2025-07-07
s3c2440完全版
2011-12-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅