- 博客(23)
- 资源 (1)
- 收藏
- 关注
原创 glibc源码分析之getpriority,setpriority,nice
glibc提供了getpriority,setpriority,nice函数用于获取或者设置进程的优先级。getpriority函数定义在sysdeps/unix/sysv/linux/getpriority.c文件中。#define PZERO 20int__getpriority (enum __priority_which which, id_t who){ int res; res
2017-08-23 19:16:41 841
原创 进程优先级之setpriority系统调用
unix提供了setpriority系统调用用于设置进程,进程组,用户进程的优先级。long setpriority(int which,int who,int niceval)参数which是PRIO_PROCESS,PRIO_PGRP,PRIO_USER中的一个。#define PRIO_PROCESS 0#define PRIO_PGRP 1#define PRIO_USER
2017-08-22 19:55:13 5374
原创 进程优先级之getpriority系统调用
unix提供了getpriority系统调用用于获取当前进程及其他进程的优先级。long getpriority(int which,int who)getpriority系统调用用于返回进程,进程组,用户进程的进程优先级。参数which是PRIO_PROCESS,PRIO_PGRP,PRIO_USER中的一个。#define PRIO_PROCESS 0#define PRIO_PGRP
2017-08-22 19:37:47 3699
原创 进程优先级之nice系统调用
unix提供了nice系统调用用于修改当前进程的优先级。long nice(int inc)nice系统调用增加inc到当前进程的nice值。(nice值越大,运行的优先级越低)只有超级用户可以设置inc为负值。如果系统调用执行成功,返回0。如果执行失败,返回-1,错误号放入errno中。
2017-08-22 18:48:23 840
原创 linux系统调用列表
进程进程标识符 系统调用名 系统调用功能 getpid 获取进程标识符 getppid 获取父进程标识符进程优先级 系统调用名 系统调用功能 nice 设置当前进程优先级 getpriority 获取进程优先级 setpriority 设置进程优先级
2017-08-22 18:28:21 314
原创 glibc源码分析之chdir,fchdir,chroot,getcwd
umask函数用于设置创建文件的掩码。它是由脚本生成的:#define SYSCALL_NAME umask#define SYSCALL_NARGS 1#define SYSCALL_SYMBOL __umask#define SYSCALL_CANCELLABLE 0#define SYSCALL_NOERRNO 1#define SYSCALL_ERRVAL 0#include <
2017-08-20 15:33:03 850
原创 glibc源码分析之普通文件读写
glibc中关于普通文件读写的函数有open,close,read,write,lseek,lseek64。它们分别封装了open,close,read,write,lseek,_llseek系统调用。 lseek用于在32位长度的文件中跳转,_llseek用于在64位长度的文件中跳转。 open函数的封装在前文中已经介绍了。close函数定义在sysdeps/unix/sysv/linux/c
2017-08-18 19:23:03 2206
原创 glibc源码分析之statfs系列函数
glibc中与statfs函数相关的函数有4个,它们分别是:statfs,fstatfs,statfs64,fstatfs64。它们都是系统调用的封装函数。 关于statfs的系统调用有statfs(99),fstatfs(100),statfs64(268),fstatfs64(269)。statfs,fstatfs用于获取文件系统属性,属性是32位的。statfs64,fstatfs64用于获
2017-08-18 18:54:07 2056
原创 glibc源码分析之rename函数
glibc提供了rename系统调用用于修改文件路径。rename函数定义在sysdeps/unix/sysv/linux/rename.c文件中。intrename (const char *old, const char *new){ return INLINE_SYSCALL_CALL (rename, old, new);}rename 函数调用了rename系统调用。
2017-08-18 18:32:20 886
原创 glibc源码分析之access函数
access函数用于检查文件的权限。它封装了access系统调用。 access源码定义在sysdeps/unix/sysv/linux/access.c文件中。int__access (const char *file, int type){ return INLINE_SYSCALL_CALL (access, file, type);}weak_alias (__access,
2017-08-16 19:09:26 991
原创 glibc源码分析之utime系列函数
glibc中关于utime的函数有utime,utimes。它们都是系统调用的封装函数。 utime函数由脚本生成。生成的.S文件的内容为:#define SYSCALL_NAME utime#define SYSCALL_NARGS 2#define SYSCALL_SYMBOL utime#define SYSCALL_CANCELLABLE 0#define SYSCALL_NOER
2017-08-16 19:00:47 367
原创 glibc源码分析之chown系列函数
glibc中关于chown的函数有3个,它们分别是chown,fchown,lchown。它们都是系统调用的封装函数。 关于chown的系统调用有6个,它们分别是lchown(16),fchown(95),chown(182),lchown32(198),fchown32(207),chown32(212)。它们都是用于改变文件的用户ID和组用户ID。chown系列系统调用只能将用户ID和组用户I
2017-08-16 18:49:46 676
原创 glibc源码分析之truncate系列函数
glibc中关于truncate的函数有4个,它们分别是truncate,ftruncate,truncate64,ftruncate64。 truncate和ftruncate可以截断文件为32位长度,truncate64和ftruncate64可以截断文件为64位长度。truncate函数的源码在sysdeps/unix/sysv/linux/truncate.c文件中。int__trunc
2017-08-15 20:07:55 855
原创 glibc源码分析之chmod系列函数
glibc中关于chmod系列的函数有chmod,fchmod。它们都是用于改变文件的属性。 在glibc中chmod和fchmod两个函数都是使用脚本生成的系统调用的封装函数。 它们生成的.S文件内容分别为:#define SYSCALL_NAME chmod#define SYSCALL_NARGS 2#define SYSCALL_SYMBOL __chmod#define SYSC
2017-08-15 19:39:09 841
原创 调用stat64系列函数
前文是对stat64系列函数的源码分析。下面将介绍如何在实际情况下调用stat64系列函数。#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int main(int argc,char **argv){ struct stat64 st64; stat64("/home",&st64);
2017-08-15 19:26:43 7701
原创 glibc源码分析之stat64系列函数
前文介绍了stat系列函数的源码实现,本文将向大家介绍stat64系列函数的源码实现。 stat64系列函数包括stat64,fstat64,lstat64。由于stat系列函数只能获取32位长度的文件的属性,所以glibc又提供了stat64系列函数,用于获取64位长度的文件的属性。 stat64的源码如下:#undef stat64intattribute_hiddenstat64 (
2017-08-15 19:11:07 3258 1
原创 glibc源码分析之stat系列函数
glibc中stat系列函数有stat,fstat,lstat。它们都是系统调用的封装函数。 关于stat的系统调用有oldstat(18),oldfstat(28),oldlstat(84),stat(106),lstat(107),fstat(108),stat64(195),lstat64(196),fstat64(197)。oldstat系列系统调用被stat系列系统调用替代了。stat系
2017-08-14 19:58:15 4124
原创 glibc源码分析之系统调用(二)
前文已经向大家介绍了用脚本封装系统调用的方法。在本文中,我将向大家介绍使用.c文件封装系统调用的方法。使用.c文件封装系统调用一般出于以下两个原因:一,系统调用已过时,可以使用新的系统调用替换旧的系统调用。系统调用的语义不变。二,封装后的函数改变了系统调用的语义。stat系统调用的封装便是原因一的一个例子。stat系统调用是106号系统调用。使用stat系统调用可以获取文件的属性,但是获取的属性值都
2017-08-13 19:29:24 916
原创 glibc源码分析之系统调用(一)
在编写本文时,glibc的最新版本是glibc-2.26。本文所有描述都是基于glibc-2.26。 系统调用 系统调用是程序员接触到的最底层的构建程序的组件。它们由内核实现,提供给程序调用。用户按照其调用规则可以实现调用。 glibc的封装方式 glibc使用了两种方式来封装系统调用。一种是由脚本生成。一种是.c文件。 使用.c文件封装系统调用,是因为封装过程比较复杂,除了按系统调用的调
2017-08-10 20:22:41 2757 2
原创 进程信息之getrusage系统调用
unix提供了getrusage系统调用获取进程的资源信息。long getrusage(int who, struct rusage *ru);struct rusage { struct timeval ru_utime; /* user time used 用户态下程序运行时间*/ struct timeval ru_stime; /* system time
2017-08-08 19:56:38 682
原创 进程信息之times系统调用
unix提供了times系统调用用于获取进程及其子进程的运行时间。clock_t sys_times(struct tms* tbuf);struct tms { clock_t tms_utime; clock_t tms_stime; clock_t tms_cutime; clock_t tms_cstime;};(32位系统下clock_t为long类型)t
2017-08-08 19:29:32 722
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人