Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
18
Добавлен:
01.05.2014
Размер:
1.6 Кб
Скачать
	#ifndef REGFILE_H		/* This is regfile.h header */

	#define REGFILE_H

	#include "filebase.h"

	

	/* A class to encapsulate POSIX and UNIX regular file objects' properties */

	class regfile	:	public filebase 

	{

		public:
			regfile( const char*fnm, int mode, int prot) : filebase(fnm,mode,prot)
 						{};
			~regfile()		{};

			int lock( int lck_type, off_t len, int cmd=F_SETLK)			

						{	struct flock flck;

							if ((lck_type&ios::in) == ios::in)

								flck.l_type = F_RDLCK; 

							else if ((lck_type & ios::out)==ios::out)

								flck.l_type = F_WRLCK;

							else return -1;

							flck.l_whence = SEEK_CUR;

							flck.l_start = (off_t)0;

							flck.l_len = len;																					

							return fcntl(fileno(),cmd,&flck);	

						};
			int lockw( int lck_type, off_t len)	{	return lock( lck_type, len, F_SETLKW);													};
			int unlock( off_t len)			{	struct flock flck;

							flck.l_type = F_UNLCK;

							flck.l_whence = SEEK_CUR;

							flck.l_start = (off_t)0;

							flck.l_len = len;

							return fcntl(fileno(),F_SETLK,&flck);	

						};

			int getlock( int lck_type, off_t len, struct flock& flck)

						{	if ((lck_type&ios::in) == ios::in)

								flck.l_type = F_RDLCK; 

							else if ((lck_type & ios::out)==ios::out)

								flck.l_type = F_WRLCK;

							else return -1;

							flck.l_whence = SEEK_CUR;

							flck.l_start = (off_t)0;

							flck.l_len = len;

							return fcntl(fileno(),F_GETLK,&flck);	

						};

	};

	#endif			/* regfile.h */
Соседние файлы в папке ch7