Hello all,

My application continuously downloads several XML files through cURL FTP methods at a certain interval (say once every hour). Also, another process reads those files and performs operations on them (read, mv, cp, etc) at a different interval.
Does anyone know if the WRITE_DATA operation is atomic?
In other words. Is it safe to assume that if I'm downloading file X, and another process is trying to access X while curl_easy_perform is writing to it, the other process will not get a corrupted or partial file? I'm attaching some sample code. Thank you in advance.


....
..
//open local file in write mode
  pFile = fopen(localSchPath.c_str(), "w");

  //verify that file opened correctly
  if(pFile == NULL)
     {
logMgr.logf(LOG_GENERAL_BASE, "Error: Opening of schedule file \"%s\" failed.", localSchPath.c_str());
     return FAILURE;
     }

  //set cURL options
  if(
((retCode = curl_easy_setopt(mp_curlConnection, CURLOPT_URL, remoteSchPath.c_str())) != CURLE_OK) || //set url of file to be downloaded ((retCode = curl_easy_setopt(mp_curlConnection, CURLOPT_FILE, pFile)) != CURLE_OK) ||//set file where data will be stored ((retCode = curl_easy_setopt(mp_curlConnection, CURLOPT_DIRLISTONLY, 0)) != CURLE_OK) //Disable directory listing option to retrieve entire contents of the file
     )
     {
logMgr.logf(LOG_GENERAL_BASE, "cURL: Error: Setting options to download file \"%s\".", localSchPath.c_str());
     return FAILURE;
     }

  //execute download
  if(curl_easy_perform(mp_curlConnection))
     {
logMgr.logf(LOG_GENERAL_BASE, "cURL: Error: Downloading of schedule file \"%s\" failed.", remoteSchPath.c_str());
     return FAILURE;
     }

  fclose(pFile); //close file stream.
...
..
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to