delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2004/01/28/14:09:05

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: "Nathan Kreiger" <nathankreiger AT hotmail DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: How do I feed output of DOS commands into a program?
Date: Wed, 28 Jan 2004 08:06:18 -0800
Lines: 55
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1158
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165
Message-ID: <4017ddaa$1_6@Newsfeeds.com>
X-Authenticated-User: $$-gw9vryh-3ijz759
X-Comments: This message was posted through 2 <A href="http://www.newsfeed.com">Newsfeed.com</a>
X-Comments2: IMPORTANT: Newsfeed.com does not condone, support, nor tolerate spam or any illegal or copyrighted postings.
X-Report: Please report illegal or inappropriate use to <abuse AT newsfeed DOT com>. Forward a copy of ALL headers INCLUDING the
X-Comments3: <A href ="http://www.newsgroups.com">Visit Newsgroups.com</a> for the BEST newsgroup service on the planet!!
Organization: Newsfeed.com - #1 Newsgroups service on the planet! - http://www.Newsfeed.com
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Greetings, group.  I'm writing a program in C++ and compiling with
DJGPP's gxx, and I'd like to be able to run DOS commands such
as "CD" (get current directory) and funnel the result back into my
program, without using temporary files.  I could always do:
   system("cd > C:\\TEMP\\curdir.tmp");
   ifstream input ("C:\\TEMP\\curdir.tmp");
   etc.....
However, when processing a large number of directories this
becomes impractical (and very hard on the hard disk, what
with repeatedly writing to the exact same spot on the disk
thousands of times within a few seconds).

(Yes, I'm aware of getcwd() and getwd(), but I don't like the
fact that they tend to mix DOS and LFN versions of directory
names together in an unpredictable way; that makes them
useless for my purposes.  Besides, I'd still like to find a way
to pass DOS command results into C++ programs.)

I tried seting an environmental variable in one program and reading
it in another:

PROG1.cpp:
int main(int argc, char *argv[])
{
  __system_flags |=  __system_call_cmdproc;
  __system_flags &= ~__system_redirect;
  char command[300] = "set RH_ENV_VAR=";
  strcat(command, argv[1]);
  system(command);
  return 0;
}

PROG2.cpp:
int main()
{
 __system_flags |=  __system_call_cmdproc;
 __system_flags &= ~__system_redirect;
 cout << getenv("RH_ENV_VAR") << endl;
 return 0;
}

I ran PROG1 and set the variable to "One, two, three, test.",
but when PROG2 trys to read the variable, it's already gone.
(Garbage collection at work?)  Is there a way to set environmental
variables so that they stay put even when the program that set them
terminates?

-- 
Cheers,
Robbie Hatley
Tustin, CA, USA
lonewolfintj AT pacbell DOT net
http://home.pacbell.net/earnur/




----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019