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

Linux系统调用API】六、目录操作相关函数

,注意是当前进程,也就是main进程的工作路径*/ chdir(argv[1]); /*在新的路径创建一个文件来证明路径切换成功*/ int fd = open("hello.txt...chdir()函数指定的路径,并且test路径从无到有增加了一个文件,也证明我们切换工作路径成功了。...但是有些人可能会有一个疑惑,看途中的红色箭头标记,既然当前工作路径已经切换为①所标识的路径了,那么为什么②处显示的工作路径还是原来的路径呢?...这是因为,我们在程序中使用chdir()函数切换的路径是进程 ./chdir_test 的路径,也就是说 ..../chdir_test 的路径被切换为①了,并且测试结果(hello.txt文件的创建)也证明切换成功。而②所标识的路径是当前shell进程的工作路径,它们俩根本不是一回事。

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

    LinuxLinux系统调用

    Linux系统调用 前言 操作系统——管理计算机硬件与软件资源的软件,是用户和系统交互的操作接口,为它上面运行的程序提供服务。...操作系统内核——操作系统的内核,负责管理系统的进程、内存、设备驱动程序、文件和网络系统。一个内核不是一套完整的操作系统。例如LinuxLinux操作系统——基于Linux内核的操作系统。...有了这样的内核访问路径限制,才能保证内核安全无误。 使用户程序具有可移植性 对于不同平台不同硬件来说。 ---- 系统调用的实现 通过软件中断实现。...Linux系统内核响应软件中断,从用户态切换到内核态,执行相应的系统调用。...---- GLIBC库函数 Glibc实现操作系统提供的系统服务,即为系统调用的封装。 每个特定的系统调用对应了至少一个glibc封装的库函数。 多个API也可能只对应同一个系统调用

    27.9K10

    Linux 系统调用

    Linux 中,系统调用是用户空间访问内核的唯一手段﹔除异常和陷入外,它们是内核唯一的合法入口。实际上,其他的像设备文件和/proc之类的方式,最终也还是要通过系统调用进行访问的。...而有趣的是,Linux 提供的系统调用却比大部分操作系统都少得多。 要访问系统调用(在 Linux 中常称作 syscall),通常通过C库中定义的函数调用来进行。...系统调用在出现错误的时候C库会把错误码写人errno全局变量。通过调用perror()库函数,可以把该变量翻译成用户可以理解的错误字符串。 在 Linux 中,每个系统调用被赋予一个系统调用号。...这样,通过这个独一无二的号就可以关联系统调用。当用户空间的进程执行一个系统调用的时候,这个系统调用号就用来指明到底是要执行哪个系统调用;进程不会提及系统调用的名称。...假设系统调用在内核空间定义为 sys_ioctl,那么该系统调用的用户空间接口为 ioctl Linux kernel-5.18.8 有 440 个系统调用,这些系统调用讲究通用性,一旦固定,很少修改,

    9.8K20

    Linux系统调用API】四、与权限有关的函数

    函数参数 pathname:文件名(及路径) mode:要判断的选项 R_OK:是否有读权限 W_OK:是否有写权限 X_OK:是否有执行权限 F_OK:是否存在 函数返回值 成功返回0(有对应权限或文件存在...函数参数 path:文件名(路径) mode:文件的权限,可以通过与运算设定多个权限。...所以,如果你查看man手册如果发现没有函数原型,说明该函数有同名命令,需要加上章节才能查看函数的帮助手册 man 2 chown,系统调用都在第2章节。...函数参数 oldpath:旧的文件名(或路径) newpath:新的文件名(或路径) 函数返回值 成功返回0。On success, zero is returned....函数参数 path:文件名(路径),必须存在,只有是已经存在的文件才能去截断。

    11010

    Linux系统调用API】七、errno()、strerror()、dup()、dup2()

    在下面三个路径可以看到errno相关的内容 /usr/include/errno.h /usr/include/asm-generic/errno-base.h /usr/include/asm-generic...STDOUT_FILENO); printf("first: %s\n", argv[1]); /* =========================== printf会进行系统调用...API与C库函数的调用关系》中讲的系统调用问题,C库函数printf()会调用系统API函数write(),这是会用到一个文件指针,这里面有一个缓冲区buffer,要打印的内容会先放入到buffer中,...如果我们在第一次调用printf()函数后不刷新这个buffer缓冲区的话,在第二次打印的时候,buffer就会保留有上次调用时放入缓冲区的内容,所以打印到标准输出时,打印了两句话。...注意:这里的 "hello\ linux" 中,"\ " 使通过转义符把空格的特殊含义去掉,如果不加转义符,shell会把空格分开的内容当作两个字符串,通过转义符就可以实现在字符串中写入空格,这是shell

    17610

    Linux系统调用原理

    系统调用Linux 内核提供的一段代码(函数),其实现了一些特定的功能,用户可以通过 int 0x80 中断(x86 CPU)或者 syscall 指令(x64 CPU)来调用 系统调用。...二、进入系统调用 本文主要介绍的是 x86 CPU 进入系统调用的方式 Linux 提供了 int 0x80 中断来让用户程序进入 系统调用,我们来看看 Linux 对 int 0x80 中断的处理初始化过程...三、系统调用实现 当用户要调用 系统调用 时,需要通过向 eax 寄存器写入要调用系统调用 编号。...而 Linux 进入中断处理程序时,会把这些寄存器的值保存到内核栈中,这样 系统调用 就能通过内核栈来获取到参数。...但由于寄存器只能传递 32 位的整型值(x86 CPU),所以参数一般只能传递指针或者整型的数值,如果要获取指针对应结构的数据,就必须通过从用户空间复制到内核空间,如 sys_open() 系统调用获取要打开的文件路径

    4.2K30

    Linux系统调用过程

    1 系统调用的作用 系统调用是操作系统提供给用户(应用程序)的一组接口,每个系统调用都有一个对应的系统调用函数来完成相应的工作。用户通过这个接口向操作系统申请服务,如访问硬件,管理进程等等。...2 系统调用过程 http://www.linuxidc.com/Linux/2015-04/116546.htm 系统调用是操作系统提供给用户(应用程序)的一组接口,每个系统调用都有一个对应的系统调用函数来完成相应的工作...2.根据系统调用号取出系统调用函数在系统调用表的基地址,得到一个系统调用函数的函数指针 3....声明自己的系统调用函数 在include/linux/syscall.h添加asmlinkage long sys_pk() 用户空间:       void pk()   {     __asm__...声明自己的系统调用函数 在include/linux/syscall.h添加asmlinkage long sys_pk() 用户空间:       void pk() { __asm__( "

    4.8K70

    详解linux系统调用原理

    被 软中断 打断后,执行 中断处理函数 ,即 系统调用处理函数 ( system_call ); 系统调用处理函数 调用 系统调用服务例程 ( sys_xyz ),真正开始处理该系统调用; 执行态切换...而 库函数 与 系统调用处理函数 之间,由于涉及用户态与内核态的切换,要复杂一些。 Linux 通过 软中断 实现从 用户态 到 内核态 的切换。...在 Linux 中, 系统调用号 一般通过 eax 寄存器 来传递。...; 系统调用处理函数 准备 内核执行栈 ,并保存所有 寄存器 (一般用汇编语言实现); 系统调用处理函数 根据 系统调用调用对应的 C 函数—— 系统调用服务例程 ; 系统调用处理函数 准备 返回值...第 12 行,准备 系统调用号 :将常数 4 放进 寄存器 eax 。 系统调用号 4 代表 系统调用 SYS_write , 我们将通过该系统调用向标准输出写入一个字符串。

    4.2K43

    Linux 库函数与系统调用

    一、系统调用 系统调用,我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作。...所有 C 函数库是相同的,而各个操作系统系统调用是不同的。 函数库调用调用函数库中的一个程序,而系统调用调用系统内核的服务。...函数库调用是与用户程序相联系,而系统调用是操作系统的一个进入点 函数库调用是在用户地址空间执行,而系统调用是在内核地址空间执行 函数库调用的运行时间属于「用户」时间,而系统调用的运行时间属于「系统」时间...当一个进程正在运行,遇到读写文件操作,会发生一个中断,中断后系统会把当前用户进程的一些寄存器信息保存在内核堆栈中,接着去处理中断服务程序,这里是要去执行系统调用Linux 中通过执行 int $0x80...来执行系统调用的中断,但内核实现了很多系统调用,这时需要传递「系统调用号」来指明需要哪个系统调用

    7.4K30

    【高级编程】Linux read系统调用

    比如 fork、clone、execve、exit等 那为什么一定要用系统调用来访问操作系统的内容呢,其实这可以看做对内核的保护,linux分为用户空间和内核空间,而用户空间是不允许访问内核空间的数据的...例如read系统调用,0x80 中断处理程序接管执行后,先检查其系统调用号,然后根据系统调用号查找系统调用表,并从系统调用表中得到处理 read 系统调用的内核函数 sys_read ,最后传递参数并运行...引入 cache 层的目的是为了提高 linux 操作系统对磁盘访问的性能。 Cache 层在内存中缓存了磁盘上的部分数据。...文件的page cache结构 在 Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件 中写数据时...为了满足普遍性要求,linux使用定义在linux/fs.h中的结构体address_space结构体描述页高速缓存中的页面。

    6.1K110

    Linux系统编程:基本IO系统调用

    open()系统调用 对文件进行读写之前,必须先打开文件。Linux提供了系统调用open()。...read()系统调用 文件打开后,就能够读文件了。read()是最基础、最常见的读取文件的机制。...如果文件以O_NONBLOCK模式打开,则文件为非阻塞模式,当文件没有数据可以读时,read系统调用返回-1,并把errno设置为EAGAIN。...系统调用write()时,数据从用户空间的缓冲区中拷贝到了内核空间的缓冲区,但并没有立即把数据写入磁盘中,这称为延迟写。延迟写的问题在于,如果在数据真正写入磁盘之前系统崩溃了,则数据可能丢失。...Linux系统也支持强制文件立即写入磁盘上,这在后面介绍。 close()系统调用 程序完成文件的读写后,调用close函数关闭文件描述符与文件之间的连接,使得文件描述符可以被重用。

    3.1K30

    说说Linux系统调用那些事儿

    与函数调用相比,系统调用的开销要大一些,因为在执行系统调用时,Linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码。...频繁使用系统调用的例子 下面是一个关于文件复制的程序,看起来非常的简单,我们首先使用系统调用来完成文件复制的操作,为了体现频繁的系统调用,程序中将每次读写的数据块大小设为1byte,被复制的文件大小为1M...不使用系统调用的例子 为了体现不使用系统调用的优势,我们再来写一个不使用系统调用的程序: /*copy_system3.c*/ #include #include <stdlib.h...; 如果不可避免的使用了系统调用,那么就充分利用这次系统调用,让它完成尽可能多的工作。...Linux 程序设计(第四版). 人民邮电出版社 https://www.jianshu.com/p/2c60d669c9fb

    1.5K20
    领券