How to prevent a C++ program reading a file that is still being written to.?


 
Thread Tools Search this Thread
Top Forums Programming How to prevent a C++ program reading a file that is still being written to.?
# 1  
Old 06-26-2014
How to prevent a C++ program reading a file that is still being written to.?

Hi,

Hopefully someone can help.

We have a process that writes a file using Connect Direct to our local Solaris server and then our C++ program will pick up the file and process it. Unfortunately, because of the size of the file, the C++ program is processing the file before it has finished being written. Which causes digital signature verification to fail.

Does anyone know of a way of ensuring that the process cannot pick up/ access the file before the write is complete? I'm fairly certain that Unix doesn't have any default locking of files.

It is worth noting we do not have GNU on the solaris server.

I have various inelegant solutions (such as listing the directory and checking if the filesize is still changing), but I was wondering if there was a better way.


Thanks in advance

Chris
# 2  
Old 06-26-2014
Code:
 std::ofstream.is_open()

# 3  
Old 06-26-2014
Thanks, but wouldn't that just check if the open has been successful?

I need to prevent the file being opened until the write from Connect Direct has finished.
# 4  
Old 06-26-2014
Control it from Connect Direct.

Using sysops in process to execute your program after the transfer is completed.
OR
In connect direct process, rename the file after transfer is completed (mv is atomic if on same filesystem), to a name your program expects.
# 5  
Old 06-26-2014
Unfortunately we are using an adaptor and not a full version of Connect Direct (which is what is making life hard).
# 6  
Old 06-26-2014
Well i'm not much of a c++ programer but...

You can check last modification time of file in your code.
So if the file has modification time n seconds/minutes less then systime and the file has not been processed before, execute the program.

Hope that helps
Regards
Peasant.
# 7  
Old 06-26-2014
Clever methods checking timestamps can't tell the difference between a completed upload, a slow upload, a stalled upload, and a broken upload. It's the client application's job to tell you when the file is complete, your server-side one cannot psychically know without its help.

Often this is accomplished by having the application upload to one folder, then having the same application move it to another folder when complete -- as long as the folder is on the same partition, files will seem to 'appear' in it instantly and whole once a download completes, and never before.

Last edited by Corona688; 06-26-2014 at 12:14 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Debugging a program written in two languages

Subject: Debugging a program written in two languages Platform: Linux (Kubuntu) I am trying to debug a C application with bindings to some simple functions written in Ada using the GNAT Programming Studio IDE (GPS). The main entry point is in C. The debugger is gdb. I managed to compile... (0 Replies)
Discussion started by: NiGHTS
0 Replies

2. Programming

Reading long options in C++ program

I am reading arguments passed to a C++ program which accepts long options. Long options start with '--', with the value joined with the option by an = sign, with no intervening spaces. An example is as follows: programName --vdz=15.0 I want to store 'vdz' in variable 'key', whereas... (4 Replies)
Discussion started by: kristinu
4 Replies

3. Shell Programming and Scripting

Reading from a file a background program writes to

Hi! #!/usr/bin/env bash rm tmpcomm nc -v -u -l 444 | hexdump -b > tmpcomm while : do read l1 < tmpcomm read l2 < tmpcomm read l3 < tmpcomm read l4 < tmpcomm # do something doneI start netcat in the background and listen for an incoming conncetion. All incoming... (1 Reply)
Discussion started by: torax123
1 Replies

4. Programming

Reading ELF file Symbol table of C++ program

Folks, I have some program(Test.cpp) as follows, #include<iostream> class Abc { private: int _theVar; public : int printVar(); }; int Abc :: printVar() { _theVar=10; } main() { Abc _t; (2 Replies)
Discussion started by: vinod_chitrali
2 Replies

5. Linux

Reading ELF file Symbol table of C++ program

Folks, I have some program(Test.cpp) as follows, #include<iostream> class Abc { private: int _theVar; public : int printVar(); }; int Abc :: printVar() { _theVar=10; } main() { Abc _t; (0 Replies)
Discussion started by: vinod_chitrali
0 Replies

6. Shell Programming and Scripting

prevent errors/warnings from being written to log file

i have this script which works fine but shows errors when it runs..these are more like warnings and the script runs fine.. i am on a sun machine.. i know it writes all the error messages to a master log file.. is there any way i can turn off these warnings/error messages and prevent them from being... (2 Replies)
Discussion started by: npatwardhan
2 Replies

7. Shell Programming and Scripting

How to prevent the pattern "^[[0m" from being written to a file ????

Hi folks, I am using a shell script to display the referred libraries names of any specified cpp code. Given below is the script: shell script "grblib" ------------------------------------------------------------------------- #!/bin/sh # get the lines having "include" pattern ... (5 Replies)
Discussion started by: frozensmilz
5 Replies

8. Programming

How to clear the content of a pipe (STDIN) after it is written to another program?

PROGRAM A <-> PROGRAM B PROGRAM A sends data as STDIN ro PROGRAM B and when PROGRAM B is executed from PROGRAM A, it sends output back to PROGRAM A. This is implemented using 2 pipes (fd1 & fd2). The above process happens in a loop and during the second run, the previous data that had been... (10 Replies)
Discussion started by: vvaidyan
10 Replies

9. UNIX for Dummies Questions & Answers

reading filenames inside a program

UNIX Sun Ultra60 5.5.1 Hello everybody, I have a problem that seems simple but turns out to be complex (for me at least). My program needs to open a directory (this part is easy), scan each filename and determine whether or not a file with the suffix (.07) exists. So the program would return... (5 Replies)
Discussion started by: j_t_kim
5 Replies

10. UNIX for Dummies Questions & Answers

File being used/written

Hello, Which command in unix can tell whether a file is being used/written by another process. e.g. If one process is copying a very big file in some directory and there is another cronjob process which checks for a new file and in this directory and process the file. I want to check, if the... (4 Replies)
Discussion started by: sanjay92
4 Replies
Login or Register to Ask a Question