Solved

Shareing Files in C++

Posted on 1997-03-25
2
1,025 Views
Last Modified: 2012-06-27
how can i make file share in c++ fstream?
and not be the _FSOPEN or SOPEN.
0
Comment
Question by:orenw
2 Comments
 
LVL 1

Expert Comment

by:mrosen
ID: 1162456
In the third parameter to either the constructor or the open() function, you specify one of the following:

filebuf::openprot, which is equivalent to the operating system default, filebuf::sh_compat, under MS-DOS. The possible nProt values are as follows:
filebuf::sh_compat   Compatibility share mode (MS-DOS only).
filebuf::sh_none   Exclusive mode — no sharing.
filebuf::sh_read   Read sharing allowed.
filebuf::sh_write   Write sharing allowed.

let me know if this solves what you're asking
0
 
LVL 1

Accepted Solution

by:
jmmougeolle earned 200 total points
ID: 1162457
This is the way the stream buf use sopen inside the CRT source:

***************************************************************************
****CALLING TO FILEBUFF::OPEN INSIDE FSTREAM::OPEN
***************************************************************************

void fstream::open(const char * name, int mode, int prot)
{
    if (is_open() || !(rdbuf()->open(name, mode, prot)))
        {
        istream::clear(istream::state | istream::failbit);
        ostream::clear(ostream::state | ostream::failbit);
        }
}

***************************************************************************
****USING SOPEN INSIDE FILEBUFF::OPEN
****where share is equalt to the prot param used upper
**** as an arg for  fstream::open
***************************************************************************

    share &= (sh_read|sh_write|sh_none); // ignore other bits
    if (share)  // optimization  openprot serves as default
        {
        switch (share)
            {
/*          case 03000 : Reserved for sh_compat  */

//          case sh_none :
            case 04000 :
                smode = _SH_DENYRW;
                break;
//          case sh_read :
            case 05000 :
                smode = _SH_DENYWR;
                break;
//          case sh_write :
            case 06000 :
                smode = _SH_DENYRD;
                break;
//          case (sh_read|sh_write) :
            case 07000 :
                smode = _SH_DENYNO;
                break;
            default :   // unrecognized value same as default
                break;
            };
        }

    x_fd = _sopen(name, dos_mode, smode, S_IREAD|S_IWRITE);

***************************************************************************

So using:
filebuf::sh_none is equal to SOPEN _SH_DENYRW;
filebuf::sh_read is equal to SOPEN  _SH_DENYWR;
filebuf::sh_write is equal to SOPEN _SH_DENYRW;
filebuf::sh_read|filebuf::sh_write is equal to SOPEN  _SH_DENYNO;

I think that's all the information you need to know!


0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now