Linux实验五:Linux环境下的C语言编程

文章目录

  • 一、实验目的:
  • 二、实验要求
  • 三、实验内容
    • 1、编写一段C语言程序使其完成:父进程创建两个子进程,每个进程都在屏幕上显示自己的进程ID号。
    • 2、上机调试下面的程序,观察运行结果,分析原因。
    • 3、利用两个管道进行双向通信,实现父子进程协作把整数x从1加到10。
    • 4、利用消息队列实现父子进程的通信。父进程创建消息队列,并向消息队列发送消息;子进程接受消息;父进程等待子进程接收消息后删除消息队列。


一、实验目的:

1、学会用系统调用和库函数进行编程

2、加深对进程概念的理解,明确进程和程序的区别。

3、进一步认识并发执行的实质。

4、分析进程竞争资源现象,学习解决进程互斥的方法。

5、了解Linux系统中进程通信的基本原理。


二、实验要求

1、用fork( )创建进程,观察进程的并发执行

2、使用管道、消息队列机制进行进程间通信


三、实验内容

1、编写一段C语言程序使其完成:父进程创建两个子进程,每个进程都在屏幕上显示自己的进程ID号。

运行结果示例:

# ./forktest
this is child1:16602
this is child2:16603
this is parent:16601

在这里插入图片描述

在这里插入图片描述


2、上机调试下面的程序,观察运行结果,分析原因。

#include <sys/types.h>
#include <unistd.h>
int glob=3;
int main()
{pid_t pid;int loc=3;printf("befor fork():glob=%d,loc=%d\n", glob, loc);if ((pid=fork()) < 0){printf("fork() error\n");exit(0);}else if (pid == 0){glob++;loc--;printf("child:glob=%d, loc=%d\n", glob, loc);else{printf("parent:glob=%d, loc=%d\n", glob, loc);exit(0);}return 0;
}

在这里插入图片描述
在这里插入图片描述

fork()后会有两个并发进程执行,子进程赋值了父进程的数据段,包括全局变量。父进程执行进入pid>0的情况,子进程进入pid==0的情况,分别做glob和loc的运算以及输出。


3、利用两个管道进行双向通信,实现父子进程协作把整数x从1加到10。

运行结果示例:

# ./pipetest
child 5938 read: 1                 
parent 5937 read: 2
child 5938 read: 3
parent 5937 read: 4
child 5938 read: 5
parent 5937 read: 6
child 5938 read: 7
parent 5937 read: 8
child 5938 read: 9
parent 5937 read: 10
·说明:5938和5937分别是子进程和父进程的pid

在这里插入图片描述

在这里插入图片描述


4、利用消息队列实现父子进程的通信。父进程创建消息队列,并向消息队列发送消息;子进程接受消息;父进程等待子进程接收消息后删除消息队列。

运行结果示例:

# ./msgtest
Parent:Send to the message queue successfully!
The message sent is :This is the input! 
Child:Receiving from the message queue:This is the input!

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百战c++(4)

1.求下面函数的返回值&#xff08;微软&#xff09; int func(x) { int countx 0; while(x) { countx ; x x&(x-1); } return countx; } 假定x 9999。 答案&#xff1a;8 思路&#xff1a;将x转化为2进制&#xff0c;看含有的1的个数。 2. 什么是“引用”&…

ndarray对象的建立

文章目录ndarray&#xff08;别名array&#xff09;常用属性创建NumPy数组使用array()函数使用zeros()函数使用ones()函数使用empty()函数使用arange()函数注意ndarray&#xff08;别名array&#xff09; 常用属性 import numpy as np # Numpy工具包data np.arange(12).res…

百战c++(5)

11. 已知strcpy的函数原型&#xff1a;char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串&#xff0c;strSrc 是源字符串。不调用C/C 的字符串库函数&#xff0c;请编写函数 strcpy。 答案&#xff1a; char *strcpy(char *strDest, const char *strS…

Numpy数组的广播机制

文章目录前言数组广播广播机制的使用条件前言 Numpy数组不需要循环遍历&#xff0c;即可对每个元素执行批量的算术运算操作&#xff08;矢量化运算&#xff09;。当两个数组大小&#xff08;Numpy.shape&#xff09;不同时&#xff0c;进行算术运算会出现广播机制。 数组广播…

百战c++(6)

26. 描述内存分配方式以及它们的区别? 1&#xff09; 从静态存储区域分配。内存在程序编译的时候就已经分配好&#xff0c;这块内存在程序的整个运行期间都存在。例如全局变量&#xff0c;static 变量。 2&#xff09; 在栈上创建。在执行函数时&#xff0c;函数内局部变量的…

Spring3.1.0+Quartz1.8.6整合实现计划任务

1.首先要加入任务计划的相关的jar包&#xff0c;这里除了需要加Spring3.1.0的jar&#xff0c;还需要加quartz-all-1.8.6.jarslf4j-api-1.5.8.jar slf4j-log4j12.jar这三个包&#xff0c;如果你是SSH整合的项目&#xff0c;里面有下面的两个包了&#xff0c;就可以不加&#xff…

百战c++(7)

40. 链表题&#xff1a;一个链表的结点结构 struct Node { int data ; Node *next ; }; typedef struct Node Node ; (1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel) Node * ReverseList(Node *head) //链表逆序 { if ( head NULL || head->next NU…

数组的转置和轴对称

文章目录T属性transpose()方法swapaxes()方法T属性 import numpy as np # Numpy工具包data np.arange(12).reshape(3, 4) # 创建一个3行4列的数组 print(data)# 数组的转置和轴对称 data1 data.T print(data1)print(data) [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] print(dat…

百战c++(8)

43. 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数。 KMP算法效率最好&#xff0c;时间复杂度是&#xff2f;(nm)。 44. 多重继承的内存分配问题&#xff1a; 比如有class A : public class B, public class C {} 那么A的内存结构大致是怎么样的&#xff1f; 这…

管道实现父子进程的信息传递(一)【fork函数、pipe函数、write/read操作、wait函数】

文章目录题目描述代码实现关于pipe函数关于读写操作关于读写端口关于wait函数功能&#xff1a;注意&#xff1a;关于fork函数题目描述 编写一个程序&#xff0c;利用管道实现父子进程的通信&#xff0c;父进程向子进程发送信息&#xff0c;由子进程输出显示。 代码实现 #inclu…

基础的shell编程问题(一)

文章目录题目一题目描述代码实现关于$#的有关内容实测本程序的作用题目二题目描述代码实现注释关于argc、argv关于read函数关于文件描述符关于write函数本程序的作用题目三题目描述代码实现实测关于grep命令关于read命令题目四题目描述代码实现关于test命令实测题目一 题目描述…

百战c++(9)

12 . 下面的代码输出是什么&#xff0c;为什么&#xff1f; void foo(void) { unsigned int a 6; int b -20; (ab > 6) puts("> 6") : puts("< 6"); } 这个问题测试你是否懂得C语言中的整数自动转换原则&#xff0c;我发现有些开发者懂得…

基础的shell编程问题(二)

文章目录题目一题目描述代码实现结果验证关于本题题目二题目描述代码实现结果测试题目三题目描述代码实现及结果测试题目四题目描述代码实现及结果测试题目五题目描述代码实现及结果测试题目一 题目描述 输入的命令行参数必须是hello&#xff0c;才会正确显示&#xff1b;否则…

百战c++(10)

1.多态类中的虚函数表是Compile-Time&#xff0c;还是Run-Time时建立的? 2.将一个 1M -10M 的文件&#xff0c;逆序存储到另一个文件&#xff0c;就是前一个文件的最后一个 字符存到新文件的第一个字符&#xff0c;以此类推。 3.main主函数执行完毕后&#xff0c;是否可能会…

Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】

文章目录题目描述代码实现关于本题涉及到的几个函数randint()where()cumsum()题目拓展题目描述代码实现题目拓展题目描述代码实现argmax()题目描述 从前有一个酒鬼&#xff0c;喝醉了行走在一条直线上&#xff0c;每走一步方向是不确定的&#xff08;向前或者向后&#xff09;…

百战c++(11)

31.找错 Void test1() { char string[10]; char* str1"0123456789"; strcpy(string, str1); } Void test2() { char string[10], str1[10]; for(I0; I<10;I) { str1[i] a; } strcpy(string, str1); } Void test3(char* str1) { char string[10]; if(st…

搞清axis的含义,这一篇就够了!

文章目录axis的含义旁门左道式理解二维数组中的axis三维数组中的axis正规理解axis的含义 在自己分析之前先摆上官方关于多维数组中axis的值的定义&#xff1a; axis 0&#xff0c;表示第一个维度 axis 1&#xff0c;表示第二个维度 axis -1&#xff0c;表示最后一个维度…

百战c++(12)

36. 定义 int **a[3][4], 则变量占有的内存空间为&#xff1a;_____ 37. 编写一个函数&#xff0c;要求输入年月日时分秒&#xff0c;输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒&#xff0c;则输出2005年1月1日0时0分0秒。 38.写一个函数&#xff0c;判…

Struts2.3.5+Hibernate3+Spring3.1基于注解实现的多文件上传,下载

Struts2.3.5Hibernate3Spring3.1基于注解实现的的多文件上传&#xff0c;下载,这里是上传文件到数据库中&#xff0c;上传控件可以增加和删除&#xff0c;有需要的朋友可以看看。 以下是源码下载地址&#xff1a;http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

Pandas索引操作及高级索引——reindex()方法

文章目录索引对象多个数据结构之间共享index类对象is与的区别重置索引——reindex()索引操作Series的索引操作切片不连续索引布尔型索引DataFrame的索引操作获取不连续的Series对象切片Pandas库中的操作索引方法索引对象 Index类对象&#xff0c;该对象不可以进行修改&#xf…