【Linux操作系统】【综合实验四 Linux的编译环境及线程编程】

一、实验目的

要求熟悉Linux环境中的程序编译、调试与项目管理过程并能实现具体操作;熟练使用基础函数库中与线程库中的管理函数,实现用户线程编程过程,并深入了解Linux的线程管理机制。

二、实验要求

通过这个第四阶段实验,要求掌握以下操作与相关知识:
(一)Linux中C/C++程序的编译运行环境及操作;
(二)Linux中Java程序的编译运行环境及操作;
(三)了解和熟悉C/C++函数库;
(四)掌握Linux线程管理机制与线程编程过程。使用用户线程库的管理函数实现用户级线程编程。
(五)掌握进程创建过程并熟悉进程间通信的实现。

三、实验内容

🌟(1)编写一个或相关几个C/C++代码文件,并使用gcc/g++实现编译;运行相应的可执行程序。

$sudo apt install g++
$touch test.cpp
$vi test.cpp
#内容如下
$g++ -o test test.cpp  #其中 -o 参数用于指定输出的可执行文件的文件名,这里将其命名为 test。

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

🌟(2)编写一个或相关几个Java代码文件,并使用javac实现编译,使用java运行相应的可执行程序。

$sudo apt install openjdk-11-jdk
$java -version
$touch hello.java
$vi hello.java
#内容如下
$javac hello.java
$java Hello

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

🌟(3)列出用户线程库信息,以及主要的线程管理函数。

在 Linux 系统中,用户线程库 (User-level Thread Library) 主要用于实现用户级线程调度,可以比较灵活地创建、销毁和管理线程。常见的用户线程库包括pthread 库、NPTL 库等,它们都提供了一些常用的线程管理函数。以下是一些主要的线程管理函数:

pthread_create()
pthread_create() 函数用于创建一个新线程,其原型如下:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
其中,thread 参数是指向新线程 ID 的指针,并用于标识新线程;attr 参数是指向 pthread_attr_t 结构体类型的指针,用于设置新线程的属性;start_routine参数是新线程要执行的函数;arg 参数是传递给 start_routine 函数的参数。

pthread_join()
pthread_join() 函数用于等待一个线程结束并回收该线程占用的资源,其原型如
下:
int pthread_join(pthread_t thread, void **retval);
其中,thread 参数指定要等待的线程 ID;retval 参数是指向存储退出状态值的地址,如果不关心线程的退出状态,可以将该参数设置为 NULL。

pthread_exit()
pthread_exit() 函数用于终止当前线程的执行,并返回一个值,其原型如下:
void pthread_exit(void *retval);
其中 retval 参数是线程退出时返回的值。

pthread_cancel()
pthread_cancel() 函数用于取消另一个线程,其原型如下:
int pthread_cancel(pthread_t thread);
其中,thread 参数为要取消的线程 ID。

pthread_mutex_lock() 和 pthread_mutex_unlock()
这两个函数分别用于加锁和解锁互斥锁,避免资源竞争。其原型如下:
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
其中,mutex 参数为互斥锁的指针。

pthread_cond_wait() 和 pthread_cond_signal()
这两个函数分别用于等待条件变量和发送条件信号。其原型如下:
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
int pthread_cond_signal(pthread_cond_t *cond);
其中,cond 参数为条件变量的指针;mutex 为互斥锁的指针

🌟(4)设计一个程序实例(可列出全部代码或程序功能与主要函数),编写用户线程,并实现运行。

$touch thread_demo.c
$vi thread_demo.c
#内容如下
$gcc -o thread_demo thread_demo.c -lpthread
$./thread_demo

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

🌟(5)创建一个进程,并使之成为后台进程。

$touch fork.cpp
$vi fork.cpp
#内容如下
$gcc -o fork fork.cpp
$./fork

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

🌟(6)创建一个子进程,并实现与父进程的通信。

①知识点

②示例

$touch pipe.cpp
$vi pipe.cpp
#内容如下
$g++ -o pipe pipe.cpp
$./pipe

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、实验报告要求

(一)认真撰写实验报告;
(二)进行客观的个人评定。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 实验目的 1、通过实验了解和熟悉Linux网络服务; 2、掌握Linux下建立Web服务器; 3、掌握Linux下建立FTP服务器。 二、 开发工具和运行环境 1、虚拟机VMware 2、Linux操作系统 三、 实验内容 1、了解和熟悉Linux网络服务 了解NFS网络文件系统,NFS网络文件系统架设及挂载方法,Web服务器的架设方法,FTP服务器的架设方法及访问方法,Samba服务器的架设方法。 2、Linux下建立Web服务器 (1)Apache 服务器的安装及启动 ●检测与安装 Apache rpm -qa | grep httpd ●如果没有检测到软件包,需要进行安装,在安装目录中,执行如下命令: rpm -ivh httpd-tools*. Rpm rpm -ivh mailcap-2.1.31-2.el6.noarch.rpm rpm - ivh httpd-2*. rpm rpm -ivh httpd-manual-2.*.rpm ●重新启动/停止/启动Apache服务: systemctl restart/stop/start httpd.service 或service httpd restart/stop/start ●查看 Apache服务器的运行状态: systemctl status httpd. service 或service httpd status ●测试 Apache服务器运行状态: 在图形界面打开火狐浏览器输入http://127. 0.0.1呈现测试页(CentOS 用户可以在终端使用lynx 浏览器打开,如没有安装,则使用rpm在光盘中安装lynx 浏览器) 在/var/www/html目录下创建test. html页面,使用vi编辑保存内容,重启apache服务 在火狐浏览器输入http://127. 0. 0.1/test. html查看test. html内容 (2)Apache 服务器的配置 Apache主要配置文件为httpd.conf,存储位置在/etc/httpd/conf目录下 (3)个人Web站点配置 RedHat方式: a:修改配置文件,使用vi编辑器修改主配置文件 /etc/httpd/conf/httpd. conf,修改如下配置,去掉原文中的注释符号 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点.UserDir public. _html//设 置对每个用户的Web站点目录 Allow0verride FileInfo AuthConfig Limit Opt ions MultiViews Indexes SymLinkIfOwnerMatch Inc ludeNoExec Order allow, deny Allow from all Order deny, allow Deny from all 保存文件退出,重启httpd服务 b:用户创建个人Web站点 从root用户身份切换成user1用户(如果没有普通用户,需要先创建普通用户): 在user1主目录下面创建个人站点目录$mkdir public_ html 到/home目录下修改user1目录权限 $chmod 711 user1 进入到public. _html 目录下使用vi创建index. html文件,保存退出重启httpd服务 在浏览器中输入网址http://127.0.0.1/ user1/index. html,查看效果======= CentOS方式: a:修改配置文件,使用vi编辑器修改/etc/httpd/ conf.d/userdir.conf修改成如下配置信息 UserDir disable root//基于安全 考虑,禁止root用户使用自己的站点 UserDir public_ html//设置对每个用户的Web站点目录 Allowverride None #修改为 None options None#修改为None Require method GET POST OPTIONS b:用户创建个人Web站点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值