文件的读写与上锁

合集下载

如何使用Windows系统进行文件加密和解密

如何使用Windows系统进行文件加密和解密

如何使用Windows系统进行文件加密和解密Windows系统提供了许多功能强大的工具,可用于文件加密和解密。

本文将介绍如何使用Windows系统进行文件加密和解密的步骤和注意事项。

一、文件加密文件加密是保护文件安全性的重要手段,可以防止他人未经授权访问敏感文件。

Windows系统提供了BitLocker和EFS两种文件加密方式,下面将分别介绍它们的使用方法。

1. BitLocker加密BitLocker是Windows操作系统中的一种强大的加密工具,可用于加密整个硬盘分区或移动存储设备。

步骤一:打开BitLocker在Windows资源管理器中,右击需要加密的分区或设备,选择“属性”选项,在“属性”对话框中点击“BitLocker”选项卡。

步骤二:开启BitLocker在“BitLocker”选项卡中,点击“开启BitLocker”,系统将提示选择加密方式,可选择使用密码、智能卡或USB设备作为解锁方法。

步骤三:设置加密选项根据实际需求,选择相应的加密选项,如是否使用TPM芯片、是否保存恢复密钥等。

完成设置后,点击“下一步”。

步骤四:建立恢复密码为了防止丢失解密密钥导致无法解密文件,需要设置一个恢复密码。

按照提示,输入并确认恢复密码,点击“下一步”。

步骤五:加密过程点击“开始加密”按钮,系统将开始对分区或设备进行加密操作。

加密时间长度取决于文件大小和系统性能。

2. EFS加密EFS(Encrypting File System)是一种基于文件级的加密方式,适用于加密单个文件或文件夹。

步骤一:选择文件在Windows资源管理器中,右击需要加密的文件或文件夹,选择“属性”选项,在“属性”对话框中点击“高级”按钮。

步骤二:加密文件在“高级属性”对话框中,在“加密内容以保护数据”部分勾选“加密内容以在文件上存储”,点击“确定”。

步骤三:备份加密证书系统将提示备份加密证书,点击“是”并选择一个安全的存储位置进行保存,以便进行文件的解密。

读写锁(ReadWriteLock)的使用

读写锁(ReadWriteLock)的使用

读写锁(ReadWriteLock)的使⽤Definition读写锁包含⼀对相关的锁,读锁⽤于只读操作,写锁⽤于写操作。

读锁可能由多个读线程同时运⾏,写锁是唯⼀的。

Direction1、读锁和写锁之间是互斥的,同⼀时间只能有⼀个在运⾏。

但是可以有多个线程同时读取数据。

2、写⼊数据之前必须重新确认(ReCheck)状态,因为其他的线程可能会拿到写锁再⼀次修改我们已经修改过的值。

这是因为前⼀个线程拿到写锁之后,后⾯的线程会被阻塞。

当前⼀个线程释放写锁之后,被阻塞的线程会继续运⾏完成被阻塞的部分代码,所以才会出现这样的情况。

3、当某⼀个线程上了写锁之后,⾃⼰仍然可以上读锁,之后在释放写锁,这是⼀种降级(Downgrade)的处理⽅法。

Method读写锁(ReadWriteLock)包含如下两个⽅法:1.读锁Lock readLock()2.写锁Lock writeLock()Example以下代码在开始读数据的时候上读锁,当有⼀个线程发现没有数据时,释放读锁,上写锁,开始写⼊数据。

数据写⼊完成后释放写锁,并还原成读锁,实现了简单的读和写之间的互斥。

⽰例代码:private ReadWriteLock rwl = new ReentrantReadWriteLock();//定义读写锁public Object getData(String key){//使⽤读写锁的基本结构rwl.readLock().lock();Object value = null;try{value = cache.get(key);if(value == null){rwl.readLock().unlock();rwl.writeLock().lock();try{// Recheck state because another thread might have// acquired write lock and changed state before we did.if(value == null){value = "aaaa";//写⼊数据}}finally{rwl.writeLock().unlock();}rwl.readLock().lock();}}finally{rwl.readLock().unlock();}return value;}读写锁的完整使⽤⽰例:1public class Test {2public static void main(String[] args) {3final Queue q = new Queue();4for(int i=0;i<3;i++)5 {6new Thread(){7public void run(){8while(true){9 q.get();10 }11 }12 }.start();1314new Thread(){15public void run(){16while(true){17 q.put(new Random().nextInt(10000));18 }19 }20 }.start();21 }22 }23 }2425class Queue{26private Object data = null;//共享数据,只能有⼀个线程能写该数据,但可以有多个线程同时读该数据。

保护文档内容设置密码和权限以防止未经授权的更改

保护文档内容设置密码和权限以防止未经授权的更改

保护文档内容设置密码和权限以防止未经授权的更改在现今信息化的社会里,文件的保密性和完整性显得尤为重要。

为了防止未经授权的更改、泄露或损坏,我们需要采取一定措施来保护文档内容。

其中,设置密码和权限是常见且有效的手段。

一、密码保护密码保护即通过设置密码来限制对文档的访问和修改权限。

以下是一些常见的密码保护操作步骤:1.打开文档:首先,打开需要设置密码的文档,可以是Word、Excel、PDF等格式的文件。

2.选择“文件”选项:在打开的文档界面中,点击上方菜单栏的“文件”选项。

3.选择“另存为”:在文件选项中,选择“另存为”功能,弹出保存设置界面。

4.选择文件格式:在另存为的界面中,选择需要设置密码的文件格式,例如Word文档选择“Word文档”,Excel选择“Excel工作簿”。

5.点击“工具”选项:在另存为的界面中,点击下方的“工具”选项,弹出密码设置界面。

6.设置打开密码:在密码设置界面中,选择“选项”中的“设置加密强度”,然后在“密码”一栏中输入想要设置的密码。

7.设置修改密码:如果需要设置修改密码,可以在“密码”下方的“确认密码”栏输入相应的密码。

8.保存密码设置:完成密码设置后,点击保存按钮,将文档保持到指定位置,此时文档已经设置密码保护。

通过以上步骤,我们可以轻松地设置文档的打开和修改密码,有效地阻止未经授权的访问和更改。

二、权限设置除了密码保护外,我们还可以通过权限设置来限制对文档的不同操作权限。

以下是一些常见的权限设置操作步骤:1.打开文档:同样地,首先打开需要进行权限设置的文档。

2.选择“文件”选项:点击上方菜单栏的“文件”选项。

3.选择“保护文档”:在文件选项中,选择“保护文档”功能,弹出保护设置界面。

4.选择权限设置:在保护设置界面中,选择“限制编辑”选项,进入权限设置。

5.选择限制方式:根据实际需求,选择不同的限制方式。

例如,我们可以选择只允许批注和格式更改,禁止内容编辑。

java 文件锁 用法

java 文件锁 用法

java 文件锁用法Java 文件锁(File Lock)的用法引言:在Java编程中,文件锁(File Lock)是一种机制,用于控制对文件的并发访问,以避免多个线程或进程同时对同一个文件进行读写操作而引发的数据竞争和不一致问题。

它可以确保在一个时间点只有一个线程或进程可以对文件进行访问,并且其他线程或进程需要等待直到文件被释放。

本文将介绍Java中文件锁的用法,包括文件锁的基本概念、实现文件锁的不同方法和如何正确使用文件锁来保护文件的并发访问。

一、文件锁的基本概念1. 文件锁的定义文件锁(File Lock)是一种独占锁(Exclusive Lock),它允许一个进程在同一时间内独占地对文件进行读写操作。

当一个进程获取了文件锁后,其他进程将无法获取该锁,直到文件锁被释放。

2. 文件锁的类型Java提供了两种类型的文件锁:共享锁(Shared Lock)和独占锁(Exclusive Lock)。

共享锁允许多个进程同时对文件进行读操作,但不允许写操作;独占锁则只允许一个进程对文件进行读写操作。

在实际应用中,可以根据需要选择使用适合的锁类型。

二、实现文件锁的不同方法1. 使用FileChannel实现文件锁Java的NIO(New IO)库提供了FileChannel类,该类可以用于实现文件锁。

通过FileChannel的lock方法可以获取文件的独占锁或共享锁,使用tryLock方法可以尝试获取锁并返回锁的状态。

示例代码:获取文件的FileChannel对象FileChannel channel = new RandomAccessFile("file.txt", "rw").getChannel();获取文件的独占锁FileLock lock = channel.lock();或者获取文件的共享锁FileLock lock = channel.lock(0, Long.MAX_VALUE, true);尝试获取文件的独占锁,并返回锁的状态FileLock lock = channel.tryLock();2. 使用FileLock接口实现文件锁Java的NIO库还提供了FileLock接口,通过该接口可以实现对文件的锁定和解锁操作。

OpenKM基本操作

OpenKM基本操作

权限设置
2. 选择”组”,用角色去控制权限,选择相应权限的角色, 勾选相应读写权限,如果勾选以下“递归修改权限”, 拥有该角色的用户对该文件夹下的所有文件拥有相同 的权限(这种设置对没有选择的角色对应的用户是不 可见的)
管理员主要操作
OpenKM4.1 默认管理员登录的用户名okmAdmin,密码 admin,登录后可以在工具->显示管理中进行以下操作 1.管理员, 可进行添加删除角色操作 2.管理员登录后, 可进行添加删除用户操作 3.管理员登录后, 可进行注销用户操作 4.管理员登录后, 可进行导入导出文件操作 ……..
OpenKM
OpenKM是一个开放源代码的电子文档管理系 统,它的特点是可用于大型公司或是中小企业, 适应性比较强. 并且在知识管理方面的加工,提 供了更加灵活和成本较低的替代应用。 以下是OpenKM的基本的操作管理介绍
创建文件夹
新增文档
其它基本操作
重命名,复制,添加书签,删除,上锁,解锁,下载,导出等操作类似前面 基本操作. 说明: : 1. 删除的文件会进入回收站,可以进行一些清空和恢复操作 2. 对文档进行上锁操作后,其它客户只能读,不能进行修改操作,并且锁是 由哪个用户锁的,必须由哪个用户去解锁 法: 1.签出文档,签出的同时会锁定文档,使其它用户不能操 作,同时也会下载文档到本地进行修改 2. 签入在本地修改后的文档,签入后签出前的该文档的 版本号会增加,同时该文档的锁定也会释放 注:在操作2之前如果操作了取消核对,将不能签到入被 修改后文档,签入时提示文档已存在
权限设置
权限设置,可以控制用户对文件的读写及可视 选中文件夹或文件右下方视图如下
权限设置
1. 点击上图中的“更新”,用用户去控制权限,选择相 应权限的用户,勾选相应读写权限,如果勾选以下“递 归修改权限”,用户对该文件夹下的所有文件拥有相同 的权限(这种设置对用户是可以看到的,只是读写权限 问题)

文件锁机制——精选推荐

文件锁机制——精选推荐

⽂件锁机制⽂件锁包括“建议性锁”和“强制性锁”。

Linux 系统的⽂件记录锁默认情况下是建议性的!建议性锁要求每个上锁的⽂件的进程都要检查是否有锁存在,并且尊重已有的锁。

考虑数据库存取例程库,如果数据库中所有函数都以⼀致的⽅法处理记录锁,则称使⽤这些函数存取数据库的所有进程集为“合作进程”(cooperating process)。

如果这些函数是惟⼀的⽤来存取数据库的函数,那么他们使⽤建议性锁是可⾏的。

但是,如上⾯程序所看到的,同样的情况,建议性锁也不能阻⽌对数据库⽂件有写许可权限的任何其他进程写数据库⽂件!不使⽤协同⼀致的⽅法( 数据库存取例程库 )来存取数据库的进程是⼀个⾮合作进程。

在强制性锁机制中,内核对每⼀个 open、read、和 write 都要检查调⽤进程对正在存取的⽂件是否违背了某⼀把锁的作⽤。

⼀般情况下,内核和系统都不使⽤建议性锁。

采⽤强制性锁对性能的影响很⼤,每次读写操作都要必须检查是否有锁存在。

共享锁和互斥锁则是在建议性锁或强制性锁中设置的“⼦项”,也就是在 struct flock 结构中对成员l_type 的具体设置,F_RDLCK 是共享锁,F_WRLCK 是写⼊锁(排斥锁)创建锁⽂件这⽤来控制独占式访问资源( 如串⼝ )或者⼀些不常访问的⽂件是不错的,但对于较⼤的共享型⽂件则不太适合。

假如写了⼀个程序,⽽这个程序需要其它许多不同的程序对其进⾏读取操作更新。

这⾥,可能会有⼀些问题,⽐如有⼀个程序连续⼀段较长的时间⾥都要访问数据,⽽其它的程序同时也要对这些数据进⾏处理。

当然不能让好⼏个程序要⼀直等到之前那个程序完成了⾃⼰的⼯作后( 甚⾄⼀直都会占⽤着 )才能访问数据,所以这⾥需要⼀些协调措施以满⾜同时访问同⼀个⽂件。

对于上述问题,调协的⽅法是,不能对⽂件中的数据都由⼀个程序全盘进⾏锁定,⽽是要对⼀部分数据进⾏锁定,⽽其它部分不锁定以能让别的程序可以正常访问。

⽐如⼀个⽂件⽂件分为A,B,C,D 四个部分。

文本文件加密方法总结

文本文件加密方法总结

文本文件加密方法总结随着信息技术的发展,我们越来越需要保护我们的个人文件和敏感数据。

文本文件是我们常见的文件格式之一,因此加密文本文件成为许多人关心的问题。

本文将介绍几种常见的文本文件加密方法,以帮助读者更好地保护他们的数据。

一、对称加密算法对称加密算法是最常见和简单的文本文件加密方法之一。

它使用相同的密钥对数据进行加密和解密。

其中最常见的对称加密算法是AES (Advanced Encryption Standard),它被广泛应用于文件和通信加密中。

使用对称加密算法加密文本文件非常简单。

首先,选择一个适当的密钥,然后利用加密软件或编程语言的加密函数对文本文件进行加密。

解密时,使用相同的密钥对加密过的文件进行解密即可。

然而,对称加密算法也存在一些弱点。

最大的问题是密钥的安全性。

如果密钥泄露,那么加密的数据也就不再安全。

因此,在使用对称加密算法时,密钥的安全保管十分重要。

二、非对称加密算法非对称加密算法使用一对密钥,包括公钥和私钥。

公钥可以被公开,用于加密数据,而私钥用于解密数据。

在文本文件加密中,非对称加密算法提供了更高的安全性。

这是因为即使攻击者获得了公钥,也无法解密数据,除非他们获得私钥。

最常见的非对称加密算法是RSA。

使用非对称加密算法加密文本文件需要两个步骤。

首先,使用对方的公钥对文件进行加密。

其次,将加密后的文件发送给接收方,接收方使用自己的私钥对文件进行解密。

这种方式确保了数据在传输过程中的安全性。

三、文件加密软件除了使用加密算法进行文本文件加密外,也可以使用专门的文件加密软件。

这些软件提供了简便易用的界面,使用户能够轻松地加密和解密文本文件。

文件加密软件通常提供多种加密算法和加密模式选择,以满足不同用户的需求。

用户可以选择对文件进行加密,并将其保存在指定的位置。

只有在输入正确的密码或提供有效的密钥之后,才能解密文件。

值得注意的是,使用文件加密软件加密文本文件时,务必选择可靠的软件,并保持软件及其相关组件的更新。

WPS中的文件加密和权限设置

WPS中的文件加密和权限设置

WPS中的文件加密和权限设置文件加密和权限设置是WPS办公软件中的一项重要功能,它可以帮助用户更好地保护自己的文档,确保文档在传输和存储过程中的安全性与私密性。

本文将对WPS中文件加密和权限设置的操作方法、功能特点以及应用场景进行详细介绍。

一、文件加密的操作方法WPS办公软件提供了简易的文件加密功能,用户可以通过以下步骤实现对文档的加密:1. 打开WPS办公软件,在菜单栏中选择“文件”选项,然后点击“加密”。

2. 在弹出的加密对话框中,用户需要输入一个加密密码,并确认密码。

注意,密码需要足够复杂且记住,以确保文档的安全性。

3. 加密密码确认后,用户还可以选择是否对文档的修改权限进行设置。

若选择设置权限,需要输入一个权限密码,以方便后续操作。

4. 完成以上步骤后,点击“确定”即可完成文件加密。

此时,用户在再次打开该文档时需要输入正确的密码才能访问。

二、文件加密的功能特点WPS中的文件加密功能具有以下几个特点,从而满足用户在不同场景下的加密需求:1. 密码安全性高:用户可以自主设置密码,且密码支持字母、数字和特殊字符的组合,提高了密码的复杂性和安全性。

2. 权限分级设置:用户可以根据需要设置文档的修改权限,从而实现对文档内容的保护。

权限设置可以限制文档的编辑、打印、复制、保存等操作。

3. 强大的解密功能:WPS办公软件提供了灵活的解密方式,在打开加密文档时,用户可以输入正确的密码即可解密文档,实现安全访问。

4. 支持批量加密:WPS中的文件加密功能还支持批量操作,用户可以同时对多个文档进行加密,提高工作效率。

三、权限设置的操作方法除了文件加密功能,WPS办公软件还提供了权限设置,用户可以根据需要对文档进行更为细致的权限控制。

1. 打开WPS办公软件,选择“文件”菜单,点击“权限设置”。

2. 在弹出的权限设置对话框中,用户可以设置文档的打印、复制、编辑、修改密码等权限。

用户需要输入一个权限密码以确认设置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.实验目的通过编写文件读写及上锁的程序,进一步熟悉Linux中文件I/O相关的应用开发,并且熟练掌握open()、read()、write()、fcntl()等函数的使用。

2.实验内容在Linux中FIFO(先进先出)是一种进程间的管道通信机制。

本实验通过使用文件操作,仿真FIFO结构以及生产者-消费者运行模型。

3.实验步骤(1)流程图该实验流程图如图所示(2)程序说明本实验需要打开两个虚拟终端,分别运行生产者程序(producer)和消费者程序(customer)。

此时两个进程同时对同一个文件进行读写操作。

因为这个文件是临界资源,所以可以使用文件锁机制保证两个进程对文件的访问都是原子操作。

先启动生产者进程,它负责创建仿真FIFO结构文件(实际是一个普通文件)并投入生产,就是按照给定的时间间隔,向FIFO文件写入自动生成的字符(在程序中用宏定义选择使用数字还是使用英文字符),生产周期以及要生产的资源数通过参数传递给进程(默认生产周期1S,要生产的资源数为10个字符)。

后启动的消费者进程按照给定的数目进行消费,首先从文件中读取相应数目的字符并在屏幕显示,然后从文件中删除刚才消费过的数据。

为了仿真FIFO结构,此时需要使用两次复制来实现文件内容的偏移。

每次消费的资源数通过参数传递给进程,默认值为10个字符。

(3)代码/* lock_set.c */int lock_set(int fd, int type){struct flock old_lock, lock;lock.l_whence = SEEK_SET;lock.l_start = 0;lock.l_len = 0;lock.l_type = type;lock.l_pid = -1;/* 判断文件是否可以上锁 */fcntl(fd, F_GETLK, &lock);if (lock.l_type != F_UNLCK){/* 判断文件不能上锁的原因 */if (lock.l_type == F_RDLCK) /* 该文件已有读取锁 */{printf("Read lock already set by %d\n", lock.l_pid);}else if (lock.l_type == F_WRLCK) /* 该文件已有写入锁 */{printf("Write lock already set by %d\n", lock.l_pid);}}/* l_type 可能已被F_GETLK修改过 */lock.l_type = type;/* 根据不同的type值进行阻塞式上锁或解锁 */if ((fcntl(fd, F_SETLKW, &lock)) < 0){printf("Lock failed:type = %d\n", lock.l_type);return 1;}switch(lock.l_type){case F_RDLCK:{printf("Read lock set by %d\n", getpid());break;case F_WRLCK:{printf("Write lock set by %d\n", getpid());}break;case F_UNLCK:{printf("Release lock by %d\n", getpid());return 1;}break;default:break;}/* end of switch */return 0;}本实验中的生产者程序的源代码如下所示,其中用到的lock_set()函数。

/* producer.c */#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include "mylock.h"#define MAXLEN 10 /* 缓冲区大小最大值*/#define ALPHABET 1 /* 表示使用英文字符 */#define ALPHABET_START 'a' /* 头一个字符,可以用 'A'*/#define COUNT_OF_ALPHABET 26 /* 字母字符的个数 */#define DIGIT 2 /* 表示使用数字字符 */#define DIGIT_START '0' /* 头一个字符 */#define COUNT_OF_DIGIT 10 /* 数字字符的个数 */#define SIGN_TYPE ALPHABET /* 本实例选用英文字符 */const char *fifo_file = "./myfifo"; /* 仿真FIFO文件名 */char buff[MAXLEN]; /* 缓冲区 *//* 功能:生产一个字符并写入到仿真FIFO文件中 */int product(void){int fd;unsigned int sign_type, sign_start, sign_count, size;static unsigned int counter = 0;/* 打开仿真FIFO文件 */if ((fd = open(fifo_file, O_CREAT|O_RDWR|O_APPEND, 0644)) < 0) {printf("Open fifo file error\n");exit(1);}sign_type = SIGN_TYPE;switch(sign_type){case ALPHABET:/* 英文字符 */{sign_start = ALPHABET_START;sign_count = COUNT_OF_ALPHABET;}break;case DIGIT:/* 数字字符 */{sign_start = DIGIT_START;sign_count = COUNT_OF_DIGIT;}break;default:{return -1;}}/*end of switch*/sprintf(buff, "%c", (sign_start + counter));counter = (counter + 1) % sign_count;lock_set(fd, F_WRLCK); /* 上写锁*/if ((size = write(fd, buff, strlen(buff))) < 0) {printf("Producer: write error\n");return -1;}lock_set(fd, F_UNLCK); /* 解锁 */close(fd);return 0;}int main(int argc ,char *argv[]){int time_step = 1; /* 生产周期 */int time_life = 10; /* 需要生产的资源数 */if (argc > 1){sscanf(argv[1], "%d", &time_step);}if (argc > 2){sscanf(argv[2], "%d", &time_life);}while (time_life--){if (product() < 0){break;}sleep(time_step);}exit(EXIT_SUCCESS);}本实验中的消费者程序的源代码如下所示。

/* customer.c */#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <fcntl.h>#define MAX_FILE_SIZE 100 * 1024 * 1024 /* 100M*/const char *fifo_file = "./myfifo"; /* 仿真FIFO文件名 */const char *tmp_file = "./tmp"; /* 临时文件名 *//* 资源消费函数 */int customing(const char *myfifo, int need){int fd;char buff;int counter = 0;if ((fd = open(myfifo, O_RDONLY)) < 0){printf("Function customing error\n");return -1;}printf("Enjoy:");lseek(fd, SEEK_SET, 0);while (counter < need){while ((read(fd, &buff, 1) == 1) && (counter < need)){fputc(buff, stdout); /* 消费就是在屏幕上简单的显示 */counter++;}}fputs("\n", stdout);close(fd);return 0;}/* 功能:从sour_file文件的offset偏移处开始将count字节大小的数据拷贝到dest_file文件 */int myfilecopy(const char *sour_file, const char *dest_file, int offset,int count, int copy_mode){int in_file, out_file;int counter = 0;char buff_unit;if ((in_file = open(sour_file,O_RDONLY|O_NONBLOCK))<0) {printf("Function myfilecopy error in source file\n"); return -1;}if((out_file=open(dest_file,O_CREAT|O_RDWR|O_TRUNC|O_NONBLOCK, 0644)) < 0){printf("Function myfilecopy errorindestination file:");return -1;}lseek(in_file, offset, SEEK_SET);while((read(in_file,&buff_unit,1)==1)&&(counter<count)) {write(out_file, &buff_unit, 1);counter++;}close(in_file);close(out_file);return 0;}/* 功能:实现FIFO消费者 */int custom(int need){int fd;/* 对资源进行消费,need表示该消费的资源数目 */customing(fifo_file, need);if ((fd = open(fifo_file, O_RDWR)) < 0){printf("Function myfilecopy error in source_file:");return -1;}/* 为了模拟FIFO结构,对整个文件内容进行平行移动 */lock_set(fd, F_WRLCK);myfilecopy(fifo_file, tmp_file, need, MAX_FILE_SIZE, 0); myfilecopy(tmp_file, fifo_file, 0, MAX_FILE_SIZE, 0);lock_set(fd, F_UNLCK);unlink(tmp_file);close(fd);return 0;}int main(int argc ,char *argv[]){int customer_capacity = 10;if (argc > 1) /* 第一个参数指定需要消费的资源数目,默认值为10 */ {sscanf(argv[1], "%d", &customer_capacity);}if (customer_capacity > 0){custom(customer_capacity);}exit(EXIT_SUCCESS);}4、实验结果此实验的运行结果如下所示。

相关文档
最新文档