Linux 多线程编程( POSIX )( 三 )------->代码区
来源:互联网 发布:123网络测速 编辑:程序博客网 时间:2024/05/22 02:30
转自:http://blog.sina.com.cn/s/blog_6dc9e4cf0100xdfc.html
1.sem_open与sem_close与sem_unlink与sem_getvalue
#include <stdio.h>
#include <semaphore.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main( int argc, char ** argv )
{
sem_t * sem;
int val;
if( argc !=2 )
{
printf("请输入文件名!\n");
exit(EXIT_FAILURE );
}
//!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//!> 创建信号灯
if( ( sem =sem_open( argv[1], O_CREAT, 0644, 1 ) ) == SEM_FAILED )
{ //!> if 失败,报错... ...
printf("创建信号灯失败...\n");
exit(EXIT_FAILURE );
}
else
{
printf("创建信号灯OK ...\n");
}
//!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//!> 获取指定信号灯的当前值
if(sem_getvalue( sem, &val ) != 0 )
{
printf("获取值失败...\n");
exit(EXIT_FAILURE );
}
else
{
printf("获取值为VAL == %d\n", val);
}
//!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//!> 关闭信号灯
if(sem_close( sem ) != 0 )
{
printf("Close 信号灯失败...\n");
exit(EXIT_FAILURE );
}
else
{
printf("Close 信号灯OK....\n");
}
//!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//!> 删除信号灯
if(sem_unlink( argv[1] ) != 0 )
{