Q:

Запись в файл с++

Прога записи в файл:
int main()
{
    setlocale(LC_ALL, "Russian");
    char recvbuf[] = "Привет!";
    std::string sstr(recvbuf);
    std::fstream myfile;
    do
    {
        myfile.open("Kuha.txt", std::fstream::app);
        if ( myfile )
        {
            myfile << sstr << '\n'; std::cout << "файл записан " << '\n';
            system("pause");
        }
        else
        {
            std::cout << "ошибка записи файла " << '\n';
            system("pause");
        }
    }
    while ( !myfile );
    myfile.close();
    std::cout << "выход из цикла записи файла " << '\n';
    system("pause");

    return 0;
}

Если запустить сразу два экземпляра, то второй ошибку открытия файла не выдает. А ведь должен?

A:

Файлы через std::fstream открываются в режиме общего доступа. Иными словами, любой другой процесс может открыть тот же самый файл как для чтения, так и для записи. Чтобы запретить другим процессам обращаться к файлу, необходимо открывать его в режиме монопольного доступа, т.е. заблокировать.

Linux
Можно использовать функцию flock. Она блокирует доступ к файлу по его дескриптору. Но получить дескриптор файла для потока стандартными средствами нельзя, поэтому придётся для ввода-вывода использовать системные функции read и write.
Пример использования:
int fd = open("FILE_NAME", O_RDWR| O_CREAT);
flock(fd, LOCK_EX);

char buffer[100];
read(fd, buffer, 100);
write(fd, buffer, 100);

flock(fd, LOCK_UN);
close(fd);

Windows
Можно использовать функцию WinAPI CreateFile, передав в третьем аргументе (dwShareMode) режим совместного доступа. Например, указав 0, вы откроете файл монопольно, никто другой даже на чтение открыть его не сможет. Но тогда и для всех остальных операций придётся использовать WinAPI: ReadFile, WriteFile, CloseHandle и т.д.
Пример использования:
HANDLE hFile = CreateFile("FILE_NAME",
                          GENERIC_READ | GENERIC_WRITE,
                          0,
                          NULL,
                          CREATE_ALWAYS,
                          FILE_ATTRIBUTE_NORMAL,
                          NULL);

char buffer[100];
DWORD numberOfBytesRead, numberOfBytesWritten;
ReadFile(hFile, buffer, 100, &numberOfBytesRead, NULL);
WriteFile(hFile, buffer, 100, &numberOfBytesWritten, NULL);

CloseHandle(hFile);

Microsoft Visual C++
Существует ещё один метод, но он непереносим даже в пределах одной платформы и является зависимым от компилятора. Microsoft Visual C++ предоставляет перегруженный вариант функции std::fstream::open, имеющий дополнительный аргумент, задающий режим совместного владения для файла. 
Пример использования:
std::fstream file;
file.open("FILE_NAME", std::fstream::app, _SH_DENYRW);
// ...

A:

fstream не блокирует файл для открытия другими приложениями. Для этого вам нужно воспользоваться функциями ОС (для Windows — CreateFile(), правда тогда для чтения и записи также придется пользоваться системными функциями), или, так как вы используете MSVC, можно передать функции std::fstream::open (ну или конструктору fstream) третий аргумент, который определяет режим доступа к файлу другими процессами, например, если вы хотите запретить доступ всем иным процессам к файлу, это будет выглядеть так:
#include <fstream>
#include <share.h>

std::fstream myfile("Kuha.txt", std::fstream::app, _SH_DENYRW);

