首页
学习
活动
专区
圈层
工具
发布

Linux stat函数_python系统调用函数

---- 文章目录 1. inode节点与硬链接 2. stat函数与 struct stat 结构体 3. stat函数实例分析及stat命令 4....(非系统调用) *原型:struct tm *localtime(const time_t *timep); *参数:time_t类型,struct stat中time_t st_atime,这里应该是文件访问时间...(非系统调用) struct passwd *getpwuid(uid_t uid); 根据uid获取用户信息 struct passwd { char *pw_name; username char...穿透与非穿透 上面介绍了stat函数并通过stat函数实现了 ls -l 命令的功能。我们上面演示了使用自己实现的 ./mls 查看文件信息,假如说使用 ....那么我们自己如何实现获取符号链接的实际大小呢,这就用到了非穿透函数lstat,只要把上面代码实现中的函数调用stat替换为lstat就可以了,下面测试一下。

2.8K40

linux shell函数定义和调用

说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总结一下...Shell中函数的调用方法。...那大家可能就郁闷了,函数调用或多或少总是会需要一些参数,那么这些参数要怎么传递进来呢?...首先,程序会要求你输入一个数学,然后调用函数来进行输出的功能。...,因为你并不一定知道你调用函数时函数外有什么变量存在也不知道它的值是什么,也不能保证别人在使用你的函数时会传递你在函数中使用到的变量名,如这里的n,别人在使用时可能传递的就是他自己定义的变量,如Count

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

    Linux 库函数与系统调用

    程序中调用了 printf() 函数,而库函数 printf 本质上是调用了系统调用 write() 函数,实现了终端信息的打印功能。 二、库函数 库函数可以理解为是对系统调用的一层封装。...所有 C 函数库是相同的,而各个操作系统的系统调用是不同的。 函数库调用是调用函数库中的一个程序,而系统调用是调用系统内核的服务。...函数库调用属于过程调用,开销较小,而系统调用需要切换到内核上下文环境然后切换回来,开销较大 在C函数库libc中大约 300 个程序,在 UNIX 中大约有 90 个系统调用 函数库典型的 C 函数:...五、正确理解库函数高效于系统调用 首先解释,上述说明的库函数性能远高于系统调用的前提是,库函数种没有使用系统调用。再来解释下某些包含系统调用的库函数,然而其性能确实也要高于系统调用。...当一个进程正在运行,遇到读写文件操作,会发生一个中断,中断后系统会把当前用户进程的一些寄存器信息保存在内核堆栈中,接着去处理中断服务程序,这里是要去执行系统调用,Linux 中通过执行 int $0x80

    8K30

    详解Linux的系统调用fork()函数

    在Linux系统中,fork()是一个非常重要的系统调用,它的作用是创建一个新的进程。...具体来说,fork()函数会在当前进程的地址空间中复制一份子进程,并且这个子进程几乎完全与父进程相同,包括进程代码、数据、堆栈以及打开的文件描述符等。...fork()函数的语法如下: #include pid_t fork(void); 其中,参数pid_t代表进程id,而fork()函数返回值则有以下两种情况: 如果返回0,表示当前进程是子进程...此外,fork()函数还可以通过返回值来区分父进程和子进程,这使得父进程可以管理子进程的行为,例如等待子进程结束、获取子进程的状态等。...需要注意的是,fork函数会返回两次,一次是在父进程中返回子进程的进程ID,一次是在子进程中返回0。

    2.7K30

    Linux内核如何替换内核函数并调用原始函数

    替换一个已经在内存中的函数,使得执行流流入我们自己的逻辑,然后再调用原始的函数,这是一个很古老的话题了。...比如有个函数叫做funcion,而你希望统计一下调用function的次数,最直接的方法就是 如果有谁调用function的时候,调到下面这个就好了 : void new_function() { count...办法如下: 编写一个stub函数,实现随意,其代码指令和buffer相当; 用上面重映射函数地址为可写的方法用buffer重写stub函数; 将stub函数保存为要调用的函数指针。 是不是有点意思呢?...,当内核在调用ipv4_conntrack_in的时候,将会到达这个函数。...在我保存原始函数的头n条指令的时候,n到底是多少呢?在本例中,显然n是5,符合如今Linux内核函数第一条指令几乎都是callq xxx的惯例。

    4.2K20

    【Linux系统调用API】五、link系列函数

    1. link函数 包含头文件 #include 函数原型 int link(const char *oldpath, const char *newpath); 函数功能 link...函数参数 oldpath:源文件名(路径) newpath:硬链接文件名(路径) 函数返回值 成功返回0。On success, zero is returned....2. symlink函数 包含头文件 #include 函数原型 int symlink(const char *oldpath, const char *newpath); 函数功能...读取软链接,这个函数只能读取软链接,不能读取硬链接。 函数参数 path:连接名(路径) buf:缓冲区(缓存读出的数据) bufsiz:缓冲区大小 函数返回值 成功返回缓冲区被填充的大小。...(注意同名命令unlink,查询函数man手册时要加章节2) 函数参数 pathname:链接名,也可以是文件名 函数返回值 成功返回0。

    59910

    使用trace查看函数调用关系|分析Linux性能

    抓取函数调用流程关系 抓取函数耗时 抓取代码片耗时 抓取函数里每个子函数时间戳 抓取事件信息 trace是内核自带的工具,相比于perf工具,trace只管抓trace数据并没有分析,perf在trace...在使用 function_graph 跟踪器时使用;缺省为对所有函数都生成调用关系序列,可以通过写该文件来指定需要特别关注的函数。...function_graph跟踪器可以显示类似 C 源码的函数调用关系图,这样查看起来比较直观一些;可以通过文件 set_grapch_function 显示指定要生成调用流程图的函数。...当然,我们也可以使用do_gettimeofday函数来统计耗时,不过比较麻烦,需要在检测的地方手动添加: #include linux/time.h> struct timeval old_tv;...抓取函数里每个子函数时间戳 在第一点里面,抓取函数调用流程里面只能看到每个子函数的耗时,不能看到时间戳,那么如何能看到每个子函数的时间戳呢?

    4.6K30

    【粉丝问答18】linux下查看函数被那些函数调用过?

    ,不同的是它不会给调用者返回字符串数组,而是将结果写入文件描述符为fd的文件中,每个函数对应一行.它不需要调用malloc函数,因此适用于有可能调用该函数会失败的情况。...补充 address2line 同一个函数可以在代码中多个地方调用,如果我们只是知道函数,要想知道在哪里调用了该函数,可以通过address2line命令来完成,我们用第2步中编译出来的test2来做实验...address2line 三、内核代码中如何打印函数栈? 在Linux内核中提供了一个可以打印出内核调用堆栈的函数 dump_stack()。...该函数在我们调试内核的过程中可以打印出函数调用关系,该函数可以帮助我们进行内核调试,以及让我们了解内核的调用关系。 1....举例 测试代码如下:hello.c 1 #include linux/init.h> 2 #include linux/module.h> 3 #include <asm/ptrace.h

    2K20

    Linux系统调用四、lseek()函数详解「建议收藏」

    not fount file name"); return -1; } int fd = open(argv[1], O_RDWR | O_CREAT); write(fd, "hello linux...read_size); /*STDIN_FILENO STDERR_FILENO*/ } close(fd); return 0; } 我们知道,在C语言中,字符串都是以 ‘\0’ 结尾的,比如 “hello linux...write(fd, "hello linux...", 15); 我们来测试下程序,首先明确一点,字符串会写入相应文件,但是不会打印在屏幕中,这个后面分析。...not fount file name"); return -1; } int fd = open(argv[1], O_RDWR | O_CREAT); write(fd, "hello linux...注:这里用到了一个函数叫做perror(),这个函数是用来打印错误信息的,我们在上面这些函数的返回值都可以看到一条,如果出错会设置errno,而设置errno就是和perror()函数相关联的,通过perror

    2K10

    【Linux系统调用API】一、open与close函数

    一、系统API与C库函数的调用关系 当我们在C语言程序中调用一个库函数的时候,比如调用printf()函数,实际上它是通过文件指针来指向要打印的位置的。...并且,printf()函数会调用Linux的系统函数write()函数(它是一个系统接口,也可以人工调用),write()函数再继续调用sys_write()函数(这个函数只能是操作系统去调用),sys_write...实际上,在Linux下启动一个进程,就会默认打开三个文件描述符:0标准输入、1标准输出、2标准错误。它们分别对应C语言中的stdin、stdout、stderr。...这些函数都属于系统调用,可以通过命令 man 2 functionname 查看。...,只不过我们在平时的学习中可能很少用到,main的返回值是int类型的,main函数的参数在Linux下编程用的还是比较多的。

    81910
    领券