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

linux c——dup( )和dup2( )函数详解

1、 dup函数 头文件及函数定义: #include int dup(int oldfd); dup用来复制参数oldfd所指的文件描述符。...当复制成功是,返回最小的尚未被使用过的文件描述符,若有错误则返回-1.错误代码存入errno中返回的新文件描述符和参数oldfd指向同一个文件,这两个描述符共享同一个数据结构,共享所有的锁定,读写指针和各项全现或标志位...2、dup2函数 头文件及其定义: #include int dup2(int oldfd, int newfd); dup2与dup区别是dup2可以用参数newfd...若参数newfd已经被程序使用,则系统就会将newfd所指的文件关闭,若newfd等于oldfd,则返回newfd,而不关闭newfd所指的文件。...”>”)就是通过调用dupdup2函数对标准输入和标准输出的操作来实现的。

1.8K10

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

3. dup()和dup2()函数 包含头文件 #include 函数原型 int dup(int oldfd); int dup2(int oldfd, int newfd);...,它们两个的功能和区别就是: dup(oldfd):复制文件描述符,返回一个当前空闲的最小文件描述符,并且让这个文件描述符指向oldfd所指向的文件;dup() uses the lowest-numbered...unused descriptor for the new descriptor. dup2(oldfd, newfd):重定向,关闭newfd对应的文件使文件描述符newfd空闲,然后让newfd...if(argc < 2) { printf("not found string\n"); return -1; } /*每开启一个进程...注意:这里的 "hello\ linux" 中,"\ " 使通过转义符把空格的特殊含义去掉,如果不加转义符,shell会把空格分开的内容当作两个字符串,通过转义符就可以实现在字符串中写入空格,这是shell

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

    linux系统下dupdup2函数解析

    ----今天接着昨天的话题讲,在昨天的文章里面,我们讲到了文件共享有三种实现方式,其中一种实现方式就是我们今天要讲的dupdup2函数来实现了;那么咋们也就不废话 了,直接直奔主题吧。...一、dup函数解析: 1)首先我对这个dup函数的用法也不熟,所以说用man手册来查,这是最好的学习方法(或者网上查,有一大波博客会有讲这个的用法,但就我个人而言,还是要养成自己去探索一个新东西的习惯)...函数解析: 1、相比于dup函数,dup2函数它的优势就是可以指定新的文件描述符的大小,用法比较灵活。...\n", fd2); close(fd1); return -1; } 2、dup2和dup函数一样对文件写操作都是接续写的,这里我就不做演示了,写法和dup函数一样。...上面的源代码链接:https://github.com/1121518wo/linux-/tree/master 三、Linux系统下管道符和重定向的学习补充: 这里可以参考刘遄老师写的<linux就该这么学

    92030

    linux进程管理命令使用_shell进程

    打开/关闭指定端口 三、软件包管理(rpm、yum) 1. rpm 包的管理 2. yum 包的管理 一、进程管理 在 Linux 操作系统中,每一个执行的程序都是被称之为进程,且每个进程都有它专属的进程号...查看进程树 查看进程使用指令 pstree,相较于使用 ps 指令它可以更加直观; pstree -p //显示进程的pid pstree -u //显示进程的所属用户 5....如下是 7.0 版本之后 services 指令所管理的服务: 使用指令 setup 可以查看 Linux 操作系统的所有服务;如下为所有系统服务,前面带 [*] 的代表此服务会随着操作系统的启动而自动启动...服务的运行级别 之前已经有介绍,Linux 操作系统中一共有七种运行级别; 0 – 系统停机状态,系统默认运行级别不能设置为0,否则无法正常启动(基本不用) 1 – 单用户工作状态,常用于系统维护,没有远程登陆功能...netstat -anp; 三、软件包管理(rpm、yum) 1. rpm 包的管理 rpm(RedHat Package Manage)是用于网络下载包的打包及安装工具,包含于某些 Linux 分发版本中

    2.7K20

    Linux进程——Linux进程进程优先级

    如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...当进程退出并且父进程使用wait()系统调用,后面讲) 没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。...权限是能不能得到某种资源的使用资格 3.2 查看进程优先级 我们可以用指令查看优先级: 指令:ps -al 这两个信息就是有关优先级的信息: PRI :进程当前优先级,值越小表示优先级越高...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!

    9210

    LinuxLinux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....] = { "PATH=/bin:/usr/bin", "TERM=console", NULL }; execl("/bin/ps", "ps", "-ef", NULL); // 带p的,可以使用环境变量...NULL); // 带e的,需要自己组装环境变量 execle("ps", "ps", "-ef", NULL, envp); execv("/bin/ps", argv); // 带p的,可以使用环境变量...Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

    13710

    Linux进程控制——Linux进程等待

    前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...其实status不能简单的当作整形来看待,可以当作位图来看待,具体细节如下图(只研究status低16比特位) 因此我们在研究status时,不能整体使用status!!!...获取子进程退出信息 因为我们知道了status不能整体使用因此我们要进行位操作: exit sig: status&0x7f //获取信号 exit code: (status>>8)&0xff //...获取退出结果 当我们的程序异常了,exit code 将无任何意义 exit sig : 0则代表没有收到信号 手动杀掉子进程也会获取到信号 但是如果我们每次提取退出信息都要使用繁琐的位运算,这很不方便...5. waitpid的第三个参数options 在使用waitpid的第三个参数时,前面我们提到设为0则是默认阻塞等待状态,必须等待子进程的退出,当时如果我们要做自己的事我们就不能使用0而是使用:WNOHANG

    9310

    Linux进程间通信——使用共享内存

    下面将讲解进程间通信的另一种方式,使用共享内存。 一、什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。...有关信号量的更多内容,可以查阅我的另一篇文章: Linux进程间通信——使用信号量 二、共享内存的使得 与信号量一样,在Linux中也提供了一组函数接口用于使用共享内存,而且使用共享共存的接口还与信号量的非常相似...要想让程序安全地执行,就要有一种进程同步的进制,保证在进入临界区的操作是原子操作。例如,可以使用前面所讲的信号量来进行进程的同步。因为信号量的操作都是原子性的。...五、使用共享内存的优缺点 1、优点:我们可以看到使用共享内存进行进程间的通信真的是非常方便,而且函数的接口也简单,数据的共享还使进程间的数据不用传送,而是直接访问内存,也加快了程序的效率。...同时,它也不像匿名管道那样要求通信的进程有一定的父子关系。 2、缺点:共享内存没有提供同步的机制,这使得我们在使用共享内存进行进程间通信时,往往要借助其他的手段来进行进程间的同步工作。

    3.4K20

    Daemontools的使用( Linux守护进程管理)

    前言 Daemontools是一个在linux上可以进行守护进程管理的工具,当我们有一些程序需要常驻后台,万一不小心挂掉了他可以帮我们重启服务....daemontools-0.76.tar rm -f daemontools-0.76.tar cd admin/daemontools-0.76 安装 package/install 使用...进行完上面简单的步骤,就可以开始使用了,我们模拟一种简单的使用场景....当我们想要停止服务的时候呢,使用-d参数.sudo svc -d ./. 该命令还支持以下参数: -u : up, 如果services没有运行的话,启动它,如果services停止了,重启它。...-x : exit, supervise在services停止后会立刻退出, 但是值得注意的是,如果你在一个稳定的系统中使用了这个选项,你已经开始犯错了:supervise被设计成为永远运行的。

    4.1K40

    Linux进程守护,supervisor安装及使用

    Linux挂一些Python脚本啥的就离不开进程守护这个东西了,然后了解到supervisor似乎还不错,在网上经过一番折腾及搜索,于是在此总结一下。...Supervisor安装及配置 这里我演示的系统是:CentOS Linux release 7.7.1908 (Core) 一、使用yum安装supervisor yum install supervisor...六、启动 supervisord -c /etc/supervisor/supervisord.conf -c 表示启动自己之前创建的配置文件的supervisor 后面跟着的就是路径 基本使用指令...) 这里我有两个conf(因为我将配置文件中的ini改成了conf,所以后缀是conf)文件,所以会显示有两个任务 可以通过下述指令操作任务: supervisorctl status:查看所有进程的状态...stop es:停止es supervisorctl start es:启动es supervisorctl restart es: 重启es supervisorctl update :配置文件修改后可以使用该命令加载新的配置

    2.5K20

    使用 Prometheus 和 Grafana 监控 Linux 进程

    你或许需要挖掘内核日志去查看哪个进程被杀死了。但使用监控仪表盘的话,你可以非常简单的回到过去查看哪个进程导致了这个问题。...这里有一些例子: 你可以说,第一个表格简单描述为 CPU 使用率,但是第二个描述了 java 进程的 CPU 使用率。 添加标签是指定你的指标描述更准确的一种方法。...如同你所说的那样,这个脚本收集进程所有的指标但是它只执行一次。现在我们使用 sleep 只是简单的每秒运行一次。 然后,你可以自由创建一个服务使用计时器每秒执行一次(至少使用 systemd)。...目前,我们主要专注于进程的 CPU 使用率,也可以简单的映射到内存使用率。 通过这些面板,我们将要跟踪两个指标: 所有进程当前的 CPU 使用率以及平均 CPU 使用率。...同样,我们将会使用这个面板监控内存使用率因此队列会有轻微的不同。 4– 构建线性图 线性图在 Grafana 已经有很长时间了我们将会使用它来展示这段时间内进程演变的历史。

    5.2K20

    Linux进程控制——Linux进程终止

    前言:前面了解完前面的Linux进程基础概念后,我们算是解决了Linux进程中的一大麻烦,现在我们准备更深入的了解Linux进程——Linux进程控制!...我们主要介绍的Linux进程控制内容包括:进程终止,进程等待与替换,进程程序替换! 本篇主要内容: 重识进程创建 进程退出场景 错误码和退出码 1....重识进程创建 1.1 fork函数 在我们之前提到过,创建进程使用的是fork函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...首先他们二者都可以让进程终止,并且使用方法也一样,那他们到底有什么区别呢?我们用代码来一探究竟!...关闭所有打开的流,所有的缓存数据均被写入 调用_exit printf打印如果不使用\n换行的话,数据会被存储到缓冲区里,,exit函数会帮助我们 刷新缓冲区的数据,然而_exit函数不会。

    9910

    linux通过进程名杀死进程_linux关闭进程命令

    笔记:根据一个进程的名字或启动此进程的命令(连续的一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程的命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]-  已杀死               sleep 200 [2]+  已杀死               sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9     # 1通过ps查询进程的id     # 2使用kill -9 强制终止进程...请使用此方式运行:/bin/bash kill_process.sh 进程名”     exit 1 fi # 获取要被杀死的进程名 pName=$1 <<!    ...如果每次使用命令:”/bin/bash 脚本路径  程序”来启动脚本会很麻烦 我们可以将这个命令加入到我们的环境变量里面去 这样使用起来就会方便很多 比如我们将它加入到当前用户(也可以修改全局的对所有用户生效

    16K20

    Linux进程

    Linux进程是系统中正在运行的程序的实例。每个进程都有一个唯一的进程标识符(PID),并且拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行状态的属性。...进程可以创建其他进程,被创建的进程称为子进程,创建它们的进程称为父进程。这种关系形成了一个进程树。 1. 进程的类型 在Linux操作系统中,进程是系统进行资源分配和调度的基本单位。...Linux进程可以根据其特性和用途被分为多种类型。以下是一些主要的Linux进程类型: 1....进程间通信(IPC) 进程间通信(IPC)是指两个或多个进程之间传输数据或信号的机制。Linux支持多种IPC机制,包括: 1....进程控制 Linux提供了一系列的系统调用(如fork(), exec(), wait(), exit()等)用于进程控制。

    5910

    Linux进程——进程地址空间

    前言:在讲完环境变量后,相信大家对Linux有更进一步的认识,而Linux进程概念到这也快接近尾声了,现在我们了解Linux进程中的地址空间!...&s.c } 注意:栈区是整体向下增长,局部想上使用的,就是地址最低处,依次往上放后面的元素 但是如果我们将代码更改还能运行过去嘛? char *str = "Hello, Linux!"...一更改就就运行不了了 注意:其实是因为字符常量区与代码区很接近,而编译器在编译时,字符常量区就是被编译到代码区的,代码又不可被写入,所以字符常量区也不可被修改 综上: 栈区是整体向下增长,局部想上使用的...char *str = "Hello, Linux!"...结束进程地址空间,我们的Linux进程概念到这里也结束了,后面我将带大家走进进程控制。 谢谢大家支持本篇到这里就结束了

    19010
    领券