fcntl 的学习过程

#include <sys/types.h>
#include
<sys/stat.h>
#include
<fcntl.h>
#include
"ourhdr.h"
#include
"error.c"
#include
"f10.17.c"
static void lockabyte(const char *, int, off_t );

int lock_reg( int fd, int cmd, int type, off_t offset, int whence, off_t len )
{
struct flock lock;

lock.l_type = type; /* F_RDLCK, F_WRLCK, F_UNLCK */
lock.l_start = offset; /* byte offset, relative to l_whence */
lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */
lock.l_len = len; /* bytes ( 0 means to EOF )*/

return ( fcntl( fd, cmd, &lock) );
}

int main( void )
{
int fd;
pid_t pid;

/* create a file and write two bytes to it */
if ( ( fd = creat( "templock", FILE_MODE ) ) < 0 )
err_sys(
"create error" );

if ( write( fd, "ab", 2 ) != 2 )
err_sys(
"write error" );

TELL_WAIT();
if ( ( pid = fork() ) < 0 )
err_sys(
"fork error" );
else if ( pid == 0 ) { /* child */
lockabyte(
"child", fd, 0 );
TELL_PARENT( getppid() );
WAIT_PARENT();
lockabyte(
"child", fd, 1 );
}
else {
lockabyte(
"parent", fd, 1 );
TELL_CHILD( pid );
WAIT_CHILD();
lockabyte(
"parent", fd, 0 );
}
exit(
0 );
}

static void lockabyte( const char *name, int fd, off_t offset )
{
if ( writew_lock( fd, offset, SEEK_SET, 1 ) < 0 )
err_sys(
"%s: writew_lock error", name );

printf(
"%s: got the lock, byte %d\n", name, offset );
}

转载于:https://www.cnblogs.com/lxgeek/archive/2011/04/04/2005371.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值