Dave, I read your books Teach Yourself Unix in 24 Hours and Wicked Cool Shell Scripts and since then I can’t imagine working again on a system like windows!
My problem is that I’ve started to make my C files Unix-compatible but I can’t find a command for C in Windows that does the same thing as system(“cmd”) for Unix. Any suggestions?
This was a tough question, actually, because I haven’t done any Windows-level C programming in, well, more years than I want to talk about. Let’s just say it’s been a rather long time. 🙂
I do remember that the wonderful Unix system() call that makes it a breeze to invoke any other Unix command (or sequence of commands) from within a C program has no direct analog in the Windows programming world because of the fundamental differences in OS architecture.
To figure out how to best address this, I asked a couple of colleagues who are better versed in C / Windows programming, and here’s what they had to say:
The system function executes an internal operating system command, or an .EXE, .COM (.CMD in Windows NT) or .BAT file from within a C program rather than from the command line.
The system function finds the command interpreter, which is typically CMD.EXE in the Windows NT operating system or COMMAND.COM
Your options for an analog to the Unix system call depend on how much work you want to undertake, and what you want to achieve. For total control, use the CreateProcess system call. It is low level, closer to the fork/exec level in UNIX. WinExec is a higher level function that is closer to system. You can also call system, but you have no control over console windows, window states, etc.
I hope those are helpful to you. If I bump into a better or more definitive answer, I’ll post it as a comment, and, of course, it’s quite possible that some other reader might have a better response that they can add here too!