登录社区云,与社区用户共同成长
邀请您加入社区
假设两个进程(父子进程)对一个文件进行写操作,但是这个文件同一时间只能有一个进程进行写操作。//利用信号量实现pv操作#include#include#include#include#include#include
假设两个进程(父子进程)对一个文件进行写操作,但是这个文件同一时间只能有一个进程进行写操作。
//利用信号量实现pv操作 #include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/sem.h> #include <sys/types.h> #include <fcntl.h> struct sembuf sops; static int sid; //创建一个新的信号量集 int createSemset(void) { char* pathname="semset"; if( access(pathname, F_OK)!=0 ) { int fd=open(pathname, O_RDWR | O_CREAT, 0666); if( fd<0 ) { perror("open"); return -1; } } key_t key=ftok(pathname, 'a'); if( -1==key ) { perror("ftok"); return -1; } return semget(key, 1, IPC_CREAT | 0666) ; } //P操作 int P(void) { sops.sem_num=0; sops.sem_op=-1; sops.sem_flg=0; return semop(sid, &sops, 1); } //V操作 int V(void) { sops.sem_num=0; sops.sem_op=1; sops.sem_flg=0; return semop(sid, &sops, 1); } int main(int argc, char *argv[]) { sid=createSemset(); if( -1==sid ) { perror("createSemset"); exit(1); } if( -1==semctl(sid, 0, SETVAL, 1) ) { perror("SETVAL"); exit(1); } pid_t pid=fork(); if( pid<0 ) { perror("fork"); exit(1); } else if( 0==pid ) { while(1) { if( -1==P() ) { printf("P操作失败!/n"); exit(1); } printf("子进程正在对文件进行写操作!/n"); sleep(1); printf("子进程写操作完毕,释放资源!/n"); if( -1==V() ) { printf("V操作失败!"); exit(1); } } } else { while(1) { if( -1==P() ) { printf("P操作失败!/n"); exit(1); } printf("父进程进程正在对文件进行写操作!/n"); sleep(1); printf("父进程写操作完毕,释放资源!/n"); if( -1==V() ) { printf("V操作失败!"); exit(1); } } } //删除信号量集 //semctl(sid, 0, IPC_RMID); }
更多推荐
Linux虚拟文件系统之文件系统卸载(sys_umount())
Linux中卸载文件系统由umount系统调用实现,入口函数为sys_umount()。较于文件系统的安装较为简单,下面是具体的实现。1. /*sys_umont系统调用*/2. SYSCALL_DEFINE2(umount, char __user *, name, int, flags)3. {4.struct path path;
网卡速率和双工模式的配置
http://linux.chinaitlab.com/system/792187.html1、mii-tool 配置网络设备协商方式的工具; 1.1 mii-tool 介绍; mii-tool - view, manipulate media-independent interface status (mii-tool 是查看,管理介质的网络接口的状态)
Linux系统下超级终端Minicom的使用方法(例如:连接交换机,路由器等)转http://baike.baidu.com/view/2911642.htm?fr=ala0_1
<br /> Linux系统下超级终端Minicom的使用方法 <br /> Linux下的Minicom的功能与下的超级终端功能相似,适于在通过超级终端对设备的管理以及对嵌入操作系统的升级,现写出Minicom的使用手册: <br /> 1. 启动minicom <br /> 以root权限登录系统 <br /> 使用命令 <br /> minicom –s 则minicom启动,屏
扫一扫分享内容
所有评论(0)