linux管道编程

1.实验目的
① 了解与掌握linux操作系统的基本操作
② 了解并掌握管道的工作原理
2.实验平台
操作系统:Linux
3.实验内容和要求
(一)操作实验任务
① 熟悉采用命令ln在文件与目录之间创建链接
② 掌握硬链接和软链接的区别
③ 首先在/opt目录下建立一个文件夹test_ln,然后将/tmp/file_temp/file1.txt 建立硬链接到/opt/test_ln
④ 将/tmp/file_temp/file1.txt 建立软链接到/opt/test_ln
⑤ 阅读附件find文档,测试find命令的多种组合查找文件的方法。
(二)编程实验任务
编写一个程序,建立一个管道。父进程生成两个子进程,p1和p2,两个子进程分别向管道中写入各自的字符串,父进程读出它们。(p1写:child process P1,p2写:child process P2)

实验内容与完成情况:
(一)操作实验任务

① 熟悉采用命令ln在文件与目录之间创建链接

      ln 被链接的文件名称 连接的目录名称硬连接直接:ln  而软连接则需要加入参数:ln -s 具体操作看下面的实验

② 掌握硬链接和软链接的区别

 硬链接:新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用。软链接:也称为符号链接,新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷方式十分相似,新建的软链接可以指向不存在的文件.1.硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识);而软链接不共享 inode,也可以说是个特殊的 inode,所以和原来的 inode 有区别。2.若原文件删除了,则该软连接则不可以访问,而硬连接则是可以的。

③ 首先在/opt目录下建立一个文件夹test_ln,然后将/tmp/file_temp/file1.txt 建立硬链接到/opt/test_ln
1、在/opt下建立一个文件夹test_ln

root@kali:~# mkdir /opt/test_ln

2、/tmp/file_temp/file1.txt 建立硬链接到/opt/test_ln

root@kali:~# ln tmp/file_temp/file1.txt /opt/test_ln

④ 将/tmp/file_temp/file2.txt 建立软链接到/opt/test_ln

root@kali:~# ln -s tmp/file_temp/file2.txt /opt/test_ln

因为前面已经将file1.txt进行了硬链接,所以再将file1.txt与test_ln进行链接无法成功,只能新建file2.txt进行软链接。

通过ls -li /opt/test_ln可以查看软连接与硬连接的区别

root@kali:~# ls -li /opt/test_ln

⑤ 阅读附件find文档,测试find命令的多种组合查找文件的方法。

1、根据文件名检索

  • 查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src
root@kali:~# find /usr -path '*/src/*.txt'
  • 查找 /usr 目录下所有文件名以 .txt 结尾的文件
root@kali:~# find /usr -name '*.txt'
  • 查找 /usr 目录下所有文件名刚好为 4 个字符的文件
root@kali:~# find /usr -name '????'

2、根据文件类型检索

  • 检索 /usr 下所有文件名以 python 开头的目录
root@kali:~# find /usr -type d -name 'python*'

3、检索空文件

  • 检索用户主目录下所有的空目录
root@kali:~# find ~ -type d -empty

4、反义匹配

  • 检索 /usr 下所有文件名不以 .txt 为后缀的文件
root@kali:~# find /usr -type f ! -name '*.txt'

5、 根据文件大小检索

  • 检索文件大小低于1G的文件(±表示大于或者小于)
root@kali:~# find / -size -1G

(二)编程实验任务
编写一个程序,建立一个管道。父进程生成两个子进程,p1和p2,两个子进程分别向管道中写入各自的字符串,父进程读出它们。(p1写:child process P1,p2写:child process P2)

#include <stdio.h>
#include <unistd.h>
#include<unistd.h>
#include<sys/wait.h>
main()
{int i,r,p1,p2,fd[2];char buf[50],s[50];pipe(fd);while((p1=fork())==-1);if(p1==0){lockf(fd[1],1,0);sprintf(buf,"child process P1 is sending messages! \n");printf("child process P1! \n");write(fd[1],buf,50);sleep(5);lockf(fd[1],0,0);exit(0);}else{while((p2=fork())==-1);if(p2==0){lockf(fd[1],1,0);sprintf(buf,"child process P2 is sending messages! \n");printf("child process P2! \n");write(fd[1],buf,50);sleep(5);lockf(fd[1],0,0);exit(0);}}wait(0);if((r=read(fd[0],s,50))==-1)printf("can't read pipe\n");elseprintf("%s\n",s);wait(0);if((r=read(fd[0],s,50))==-1)printf("can't read pipe\n");elseprintf("%s\n",s);exit(0);
}

linux管道编程(实验4)相关推荐

  1. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信

    <Linux系统编程实验六:进程间通信>由会员分享,可在线阅读,更多相关<Linux系统编程实验六:进程间通信(10页珍藏版)>请在人人文库网上搜索. 1.实验六:进程间通信l ...

  2. linux高级编程实验

    目录 文件管理(一) 文件管理(二) 文件管理(三) 文件管理(四) 文件管理(五) 文件管理(六) 进程(一) 进程(二) 进程(三) 进程(四) 进程(五) 管道(一) 管道(二) 管道(三) 进 ...

  3. Linux高级编程实验(30个)

    文章目录 1)输出Linux下的c也不是太难嘛!在linux下编辑,编译,运行 2)编写一个简单地c语言程序,根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件. 3)编写 ...

  4. Linux管道编程实例

    /*管道可以把管道想象为两个实体之间的单向连接器.注意,管道是半双工的,如果需要全双工通讯,应该转而考虑套接字.匿名管道又称管道,提供了一个进程与它的兄弟进程通讯的方法,只存在于父进程中:命名管道,可 ...

  5. linux信号处理编程实验报告,Linux编程之信号处理

    信号是类Unix系统中的一种通知机制.在Linux下,我们可以通过kill -l命令来查看有哪些信号.Linux下有64个信号,其中前32个信号是经典信号,后32个是用于驱动开发要用到的. 那么信号是 ...

  6. Linux 多线程编程实验知识整理

    1 Introduction 不用介绍了吧- 2 Thread Concepts 1.     Thread由下面部分组成: a.     Thread ID b.     Stack c.     ...

  7. Linux Socket 编程实验

    目录 实验内容 代码实现 实验结果 实验内容 编写两个程序,一个Server,一个Client,分别运行在两个shell窗口,通过Socket实现两个Shell窗口的即时通信: 即在A窗口输入Hell ...

  8. linux多线程编程实验报告,Linux多线程编程

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用pthread_create函数创建线程.1 2 3 4 5 6 7 8int (pthread_t *__rest ...

  9. linux c编程项目实例,Linux c编程实例_例子

    例一:字符与整型变量的实现 #include int main() { int c1,c2; char c3; c1='a'-'A'; c2='b'-'B'; c3='c'-; printf(&quo ...

最新文章

  1. 跟着老王学python
  2. cover letter 和response letter的写法
  3. 如何优雅地辞退互联网企业的老员工?
  4. 【若依(ruoyi)】字典管理
  5. MySQL找出锁等待
  6. linux之od命令总结
  7. 达梦数据库卡慢简单分析
  8. java第三课,流程控制语句
  9. git clone报错:Permission denied (publickey). fatal: Could not read from remote repository...
  10. python从url获取pdf文件并保存在本地
  11. 辅助函数 php,php的辅助函数功能
  12. GJB 8114编码标准检查软件产品简介
  13. 国开计算机网络作业,国家开放大学 计算机网络 形考作业1 答案
  14. 剑指offer系列——剑指 Offer 55 - I. 二叉树的深度
  15. mysql explain 性能分析_MySQL性能分析(Explain)
  16. maya中英文对照_maya2011中英文对照表
  17. 为员工 尚德机构建教育圈最大期权池
  18. 2.2.7Python-异常处理
  19. dwz中jqGrid的主题变更
  20. 视频教程-沐风老师3DMAX基础入门-3Dmax

热门文章

  1. java getparameter 乱码,request.getParameter()取值乱码解决办法
  2. 电路设计中上拉电阻与下拉电阻的作用
  3. 记录用bazel编译tensorflow源码
  4. 正弦波输出变压变频电源系统DSP(http://huarm.taobao.com/ )
  5. Axure学习笔记(十五)-类似于某宝商品界面的实现(利用中继器)
  6. 出海困局 | 国内增长出现瓶颈,大厂的出海“野心”也藏不住了!
  7. 3个5相乘列乘法算式_你还在背乘法口诀吗?
  8. nginx软重启nginx平滑重启
  9. pecs_Java 泛型: 什么是PECS - 穿梭于偶然
  10. idea引入在线jquery后无效,并且没有语法显示(已解决)