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
相关文档:
#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:socket编程中采用的协议族主要有两种
:
1>:网络协议族(形式如:AF_INET, PF_INET等)
2>:本地unix域格式的协议族(形式如:AF_LOCAL, AF_UNIX等)
注:协议族的选择体现在 int socket(int domain, inst type, int protocol)函数的第一个参数处。
2:这两 ......
由于 fc3 内核默认 fat32 文件系统字符编码是 ascii,如果优盘的文件名包含中文,那么在转换时会出问题,应用程序就会失去响应。具体的表现有多种,比如桌面假死,关机时提示无法卸载分区等等
解决的办法是在挂载时,根据语言环境 locale 的值,使用挂载参数。如果是 UTF- ......
原理:使用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 ......
1、修改kernel配置(linux os)
在linux下,终端---进入编译目录,执行make k.menuconfig,
在弹出的配置窗口里选择Device Drivers-----Amlogic Devices Driver-----Amlogic Display Driver-----setup logo和logo on osd0
2、图片转换(windows os)
a、打开BitmapDataGet.exe工具,选择32位。
b、选择加 ......