ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I need to issue a system command and parse the output in my program. This program will actually be runtime libraries for Windows, UNIX and Linux. On UNIX/Linux I used popen to run the command and get the output, for windows I used _popen. However _popen works as a windows console application, but fails to read the output of the command in a dll.
Does anyone know another way to issue commands and get output back in widnows? Thanks.
The _popen() is what should be used on windows, there isn't much else you can do.
On windows this function takes the command string and gives it to the cmd.exe program to execute so the syntax of your command string must be correct for this shell language, i.e. a unix style 'sh' script will not work here.
You could also look at ShellExecute() which is a slightly lower level function that bypasses cmd.exe and does similar funciton on windows.
Man that MSDN article is brutal! Tried it several years ago too
and I couldn't get it to work very well.
I just thought of another idea, in Windows the CreateNamedPipe()
method works great. Its about the only way I know of
besides sockets that works really well in windows for streaming
data between processes.
Since windows stdio is so poorly implemented, I've always
resorted to creating cross-platform libraries that implemented
it different ways depending on where it was compiled.
On windows I used the named pipes, and on Unix used the
stdio interfaces to do the same work. Painful, for sure.
Thanks for the replies guys, I found the solution to my problem.
luckly my dll will only run as console application, as soon as I changed the project setting to use "multithreaded dll" during linking (/MD option in the Project Options) _popen works.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.