linux锁的应用
学过操作系统的人知道有一个非常著名的问题:读者-写者问题。读者-写者问题是指系统当中的的资源在某一时间里可以同时允许多个进程读,但只允许一个进程写。这个进程同步问题的解法有许多种,在window系统里用互斥变量来进行进程的同步。在Linux里有另一种方法,那就是文件锁,文件锁里的文件不单单只指平时所说的文件它应包涵更广泛的含意。即也指系统所有可以访问的系统资源。可以给文件加读锁,也可以给文件加写锁,一个进程给一个文件加读锁后其他的进程也可以给这个文件加读锁,但是不可以给这个文件加写锁,直到给这个文件加读锁的所有进程都Release了它自己所加的锁后才可以。如果一个进程给一个文件加写锁后,不允许其它进程对这个文件加任何的锁。下面是锁的具体应用。/
其中用到了多个系统函数:fcntl(),getpid(),getchar,open(),flock,read(),write()。
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
int lock_set(int fd,struct flock *lock)
{
if(fcntl(fd,F_SETLK,lock)==0)
{
if(lock->l_type==F_RDLCK)
printf("set read lock,pid:%d\n",getpid());
else if(lock->l_type==F_WRLCK)
printf("set write lock,pid:%d\n",getpid());
else if(lock->l_type=F_UNLCK)
printf("release lock,pid:%d\n",getpid());
}
else
{
printf("set lock operatiion fail\n");
return -1;
}
return 0;
}
int lock_test(int fd,struct flock *lock)
{
if(fcntl(fd,F_GETLK,lock)==0)
{
if(lock->l_type==F_UNLCK)
printf("lock can be set by fd\n");
else{
if(lock->l_type=F_RDLCK)
printf("can't set lock,read lock can be set by:%d\n",lock->l_pid);
el
相关文档:
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
我们说句大白话,所谓“游说者”(
lobbist
,
lobber
)就是古代的“說客”,只是人们平日不好意思这么说而已。当今,甘愿做一名
Linux
游说者是很光荣的事情。此话当真? ......
#insmod ./driver_xx.ko
此时#cat /proc/devices 能看到 driver_xx 设备
#mknod /dev/mygpio c 230 0 (230是主设备号,0是子设备号)
{这里可以修改设备名称,但是要和测试程序中一致 fd_pio = open(“/dev/mygpio”, O_RDWR);
最好和register_chrdev(MY_PIO_MAJOR, "mygpio", &my_pio_fops)中的一致}
使 ......
1、总结背景
在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not
found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量PATH的设置问题,而PATH的设置也
是在linux下定制环境变量的一个组成部分。本案例基于RedHat ......
原理:使用Windows下的连接作为网关。Linux作为一个虚拟的客户端通过这个Windows下的连接连上网。 1、设置Windows下的本地连接答应VMware的虚拟网卡来共享上网。(很重要!) 2、设置Windows下的VMware产生的虚拟网卡1。将其IP设置为192.168.0.1。子网掩码为255.255.255.0。 3、设置VMware的网卡为Host-only 4、启动L ......