美文网首页
linux系统调用

linux系统调用

作者: D_w | 来源:发表于2021-10-08 15:21 被阅读0次

    创建进程

    创建进程的系统调用叫fork,在 Linux 里,要创建一个新的进程,需要一个老的进程调用 fork 来实现,其中老的进程叫作父进程(Parent Process),新的进程叫作子进程(Child Process),当父进程调用 fork 创建进程的时候,子进程将各个子系统为父进程创建的数据结构也全部拷贝了一份,甚至连程序代码也是拷贝过来的。对于 fork 系统调用的返回值,如果当前进程是子进程,就返回 0;如果当前进程是父进程,就返回子进程的进程号。这样首先在返回值这里就有了一个区分,然后通过 if-else 语句判断,如果是父进程,还接着做原来应该做的事情;如果是子进程,需要请求另一个系统调用execve来执行另一个程序,这个时候,子进程和父进程就彻底分道扬镳了,也就产生了一个分支(fork)了。
    有个系统调用waitpid,父进程可以调用它,将子进程的进程号作为参数传给它,这样父进程就知道子进程运行完了没有,成功与否。

    内存管理

    两个在堆里面分配内存的系统调用,brk和mmap。当分配的内存数量比较小的时候,使用 brk,会和原来的堆的数据连在一起,这就像多分配两三个工位,在原来的区域旁边搬两把椅子就行了。当分配的内存数量比较大的时候,使用 mmap,会重新划分一块区域,也就是说,当办公空间需要太多的时候,索性来个一整块。

    文件管理

    • 对于已经有的文件,可以使用open打开这个文件,close关闭这个文件;
    • 对于没有的文件,可以使用creat创建文件;
    • 打开文件以后,可以使用lseek跳到文件的某个位置;
    • 可以对文件的内容进行读写,读的系统调用是read,写是write。
      Linux 里有一个特点,那就是一切皆文件
    • 启动一个进程,需要一个程序文件,这是一个二进制文件。
    • 启动的时候,要加载一些配置文件,例如 yml、properties 等,这是文本文件;启动之后会打印一些日志,如果写到硬盘上,也是文本文件。
    • 但是如果我想把日志打印到交互控制台上,在命令行上唰唰地打印出来,这其实也是一个文件,是标准输出 stdout 文件。
    • 这个进程的输出可以作为另一个进程的输入,这种方式称为管道,管道也是一个文件。
    • 进程可以通过网络和其他进程进行通信,建立的 Socket,也是一个文件。
    • 进程需要访问外部设备,设备也是一个文件。
    • 文件都被存储在文件夹里面,其实文件夹也是一个文件。
    • 进程运行起来,要想看到进程运行的情况,会在 /proc 下面有对应的进程号,还是一系列文件。


      Linux系统调用

    相关文章

      网友评论

          本文标题:linux系统调用

          本文链接:https://www.haomeiwen.com/subject/idyqoltx.html