第一范文网 - 专业文章范例文档资料分享平台

华科操作系统实验报告要点

来源:用户分享 时间:2025/8/12 22:49:48 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

图2

使用./main打开程序

2.3 实验总结

通过此次实验了解了进程的创建,知道了进程与线程的区别。编写的程序输出固定的几个字符,功能上没做好,欠佳,有待优化。

2.4 源代码

头文件m.h #include #include #include #include #include #include #include #include #define LOOPS 10 #define IPCKEY (key_t)0x11 #define SHMKEY1 (key_t)0x222 #define SHMKEY2 (key_t)0x333 void P(int semid,int index); void V(int semid,int index); int semid; void V(int semid,int index) { struct sembuf sem; 1

第 9 页

sem.sem_num = index;/*信号灯数组灯的一个索引,指明哪个信号灯*/ sem.sem_op = 1;/*加到当前信号灯的数值*/ sem.sem_flg = 0; semop(semid,&sem,1); return; } void P(int semid,int index) { struct sembuf sem; sem.sem_num = index; sem.sem_op = -1; sem.sem_flg = 0; semop(semid,&sem,1); return; } Main.c #include\ int main(void) { int res,i; struct shmid_ds *buf; int cmd; int shmid1,shmid2; char *s,*t; pid_t p1,p2,p3; semid = semget(IPCKEY,4,IPC_CREAT|0666); res = semctl(semid,0,SETVAL,0); res = semctl(semid,1,SETVAL,1); res = semctl(semid,2,SETVAL,0); res = semctl(semid,3,SETVAL,1); shmid1 = shmget(SHMKEY1,sizeof(char),IPC_CREAT|0666); printf(\ s=(char *)shmat(shmid1,NULL,NULL); shmid2 = shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666); t=(char *)shmat(shmid2,NULL,NULL); if((p1=fork()) == 0){ execv(\ } else 1

第 10 页

{ if((p2=fork()) == 0){ execv(\ } else { if((p3=fork())==0){ execv(\ } } } p1=wait(&p1); p2=wait(&p2); p3=wait(&p3); if(semctl(semid,0,IPC_RMID,0)<0) printf(\ shmctl(shmid1,IPC_RMID,0); shmctl(shmid2,IPC_RMID,0); return 0; } Get.c #include\int main(void) { int i=0; int shmid1; char *s,*t,str[]=\ semid = semget(IPCKEY,4,IPC_CREAT|0666); shmid1 = shmget(SHMKEY1,sizeof(char),IPC_CREAT|0666); s=(char *)shmat(shmid1,NULL,NULL); do { P(semid,1); *s=str[i]; printf(\ i++; V(semid,0); }while(s[0]!='\\0'); } Copy.c #include\int main(void) { 1

第 11 页

int j=0; int shmid1,shmid2; char *s,*t; semid = semget(IPCKEY,4,IPC_CREAT|0666); shmid1 = shmget(SHMKEY1,sizeof(char),IPC_CREAT|0666); s=(char *)shmat(shmid1,NULL,NULL); shmid2 = shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666); t=(char *)shmat(shmid2,NULL,NULL); do { P(semid,0); P(semid,3); strcpy(t,s); printf(\ V(semid,2); V(semid,1); }while(t[0]!='\\0'); } Put.c #include\int main(void) { int k=0; int shmid1,shmid2; char *s,*t; semid = semget(IPCKEY,4,IPC_CREAT|0666); shmid2 = shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666); t=(char *)shmat(shmid2,NULL,NULL); do { /*if(t[0]=='\\0')break;*/ P(semid,2); if(t[0]!='\\0')printf(\ else printf(\ V(semid,3); }while(t[0]!='\\0'); }

1

第 12 页

实验三 Linux文件目录操作

3.1 实验目的与内容

3.1.1 实验目的

了解并掌握Linux文件目录结构

3.1.2 实验内容

编程实现目录查询命令; 功能类似ls -lR;

查询指定目录下的文件及子目录信息; 显示文件的类型、大小、时间等信息; 递归显示子目录中的文件信息;

3.2 实验过程

3.2.1 预备知识

Linux文件属性接口:

表3. 1 文件属性接口

函数 int fstat(int fildes,struct stat *buf); 功能 返回文件描述符相关的文件的状态信息 int lstat(const char *path, struct stat 如读取到了符号连接,读取符号连接本*buf); 身的状态信息 int stat(const char *path, struct stat *buf); 如读取到了符号连接,读取的是符号连接指向文件的信息 stat结构体几乎保存了所有的文件状态信息:

本程序中主要用到st_mode 文件的权限信息和类型信息,检查类型时使用S_ISDIR(); 宏,检查是否是目录

Linux目录结构接口:

表3. 2 目录结构接口

函数 功能 DIR *opendir(const char *name); 通过路径打开一个目录,返回一个DIR结构体 指针(目录流),失败返回NULL; struct dirent *readdir(DIR *) 1

读取目录中的下一个目录项,没有目录项可以第 13 页

搜索更多关于: 华科操作系统实验报告要点 的文档
华科操作系统实验报告要点.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4983e85gze5ap1c1kzfj507xn0uyq600qin_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top