C++ and Unix NEED HELP


 
Thread Tools Search this Thread
# 1  
C++ and Unix NEED HELP

In order to run some procedures I have to run multiple unix codes which are all programs written in the computer. For example:
: ../../bin/takeData -l -dir ../../Working_Directory -trimVcal 60
then after that is ran I'd have to run
: cd ../convert_to_tree
: ./convert_to_tree XXXX
: ./pulseHeightMain XXXX
: cd ~/log/bt0500XXXX
etc.
the XXXX represents a test run number. What I want to do is be able to type a program that would look like this:
: ./AquireData -dir Working_Directory -run XXXX
that would run all above and more. AquireData would be the C++ file. What I have so far is:

Code:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(int argc, char* argv[]) {

string file_name;
string run_num;
string config_file;
int opt = 0;

for (int i = 1; i < argc; i++) {
           if (i + 1 != argc)
               if (argv[i] == "-dir") {
                   file_name = argv[i + 1];
               } else if (argv[i] == "-run") {
                   run_num = argv[i + 1];
               } else if (argv[i] == "-mask") {
                   opt = 1;
               } else if (argv[i] == "-cfg") {
                   config file = argv[i+1];
               }
           std::cout << argv[i] << " ";
       }

if (opt == 0){
// Unix commands for unmasked
}

if (opt == 1){
// Unix commands for unmasked
}

return 0;
}

Here is my two main questions:
1. When I'm in the directory what would I type with the arguments to compile and run the c++ code and read the argument line? and can I make it look like how I wanted to above?

2. How to I put unix commands in c++ so I could have something like:
cd ~/log/bt0500 << run_num

Note: I haven't used C++ in awhile so some of the easy stuff has slipped past me, but also the reason I'm using c++ is because a shell command script like AquireData.C wouldn't be able to input directory, run number, and other options, or would it?

Last edited by Corona688; 05-23-2012 at 05:42 PM..
# 2  
C/C++ really doesn't look like the language you want to use here. Everything you want to do is difficult to hard in C, and trivial in shell.

Code:
#!/bin/sh

OPT=0

while [ "$#" -gt 0 ]
do
        case "$1" in
        -cfg) cfg_file=$2; shift ;;
        -dir)  file_name=$2; shift ;;
        -run) run_num=$2; shift ;;
        -mask) OPT=1 ;;
        *)     break ;;
        esac

        shift
done

if [ -z "$cfg_file" ]
then
        echo "No config file given" >&2
        exit 1
fi

if [ -z "$file_name" ]
then
        echo "No file name given" >&2
        exit 1
fi

if [ -z "$run_num" ]
then
        echo "No run number given" >&2
        exit 1
fi

if [ "$OPT" -eq 1 ]
then
        ../../bin/takeData -l -dir $file_name -trimVcal 60
        ...
else
        ../../bin/takeData -l -dir $file_name -trimVcal 60
        ...
fi

# 3  
1. What language is that? I want to read up on it.
2. What would be the general form of any unix command?
3. What would the unix command to run this with the arguments look like?
And thank your so much!

---------- Post updated 05-24-12 at 10:54 AM ---------- Previous update was 05-23-12 at 07:38 PM ----------

does this look right?

Code:
OPT=0
OP=0

while [ "$#" -gt 0 ]
do
        case "$1" in
        -cfg) cfg_file=$2; shift ;;
        -dir)  file_name=$2; shift ;;
        -run) run_num=$2; shift ;;
        -mask) OPT=1 ;;
        -root) OP=1 ;;
        *)     break ;;
        esac

        shift
done

if [ -z "$cfg_file" ]
then
        echo "No config file given" >&2
        exit 1
fi

if [ -z "$file_name" ]
then
        echo "No file name given" >&2
        exit 1
fi

if [ -z "$run_num" ]
then
        echo "No run number given" >&2
        exit 1
fi

if [ "$OPT" -eq 1 ]
then
        ../bin/takeData -l -dir $file_name -trimVcal 60 -mask
        cd ../convert_to_tree/
        cp $file_name/phCalibrationFitTan_C0.dat $file_name/phCalibrationFit60_C0.dat
        cp $file_name/phCalibrationFit60_C0.dat ~/log/bt0500$run_num
        cp ../convert_to_tree/config.dat_original ~/log/bt0500$run_num
        ./convert_to_tree -l -r $run_num
        ./pulseHeightMain $run_num

if [ "$OP" -eq 1 ] 
        then 
                cd ~/log/bt05r00$run_num 
                root -l 
else 
        ../bin/takeData -l -dir $file_name -trimVcal 60 
        cd ../convert_to_tree/ 
        ./Analyze.py --dir $file_name --cfg $cfg_file $run_num 
         
        if [ "$OP" -eq 1 ] 
        then 
                cd ~/log/bt0500$run_num 
                root -l 
fi

I added another option to run the change directory and run root -l and I want to add a -h help option and print some stuff. I'm assuming I'd ad a -h) *something* ;;

Moderator's Comments:
Mod Comment Code tags for code, please.

Last edited by Corona688; 05-24-2012 at 01:17 PM..
# 4  
Quote:
Originally Posted by KUJayhawk123
1. What language is that? I want to read up on it.
Shell scripting -- Bourne shell specifically. Any UNIX has some sort of Bourne shell or other. You may have heard of BASH, KSH, and POSIX shells -- these are all Bourne shells. BASH and KSH have useful extensions on the generic Bourne shell, while the POSIX version is fairly 'pure'. Pure POSIX shell code generally ought to run fine in all three.

When you login to a UNIX system with PUTTY or something, or open a terminal on a UNIX desktop, and see a prompt like user@host #, you're probably typing into a Bourne shell. It can take commands line-by-line as you type them in. It's also an entire programming language, though rather purpose-specific. The one thing it's really good at is running and organizing other commands -- i.e. what you're wanting to do here Smilie

Quote:
2. What would be the general form of any unix command?
I'm afraid this question is so vague it's difficult to answer.
Quote:
3. What would the unix command to run this with the arguments look like?
[edit] Oh, I think I see what you mean.

Code:
# This only needs to be done once, ever.  It sets the file executable, so it can be run.
chmod +x ./myscript.sh

# The arguments don't need to be in any order, except that cfgname must be straight after -cfg, etc.
./myscript.sh -cfg cfgname -dir dir -run 3 -mask -root

Quote:
does this look right?

Code:
#!/bin/sh

OPT=0
OP=0

while [ "$#" -gt 0 ]
do
        case "$1" in
        -cfg) cfg_file=$2; shift ;;
        -dir)  file_name=$2; shift ;;
        -run) run_num=$2; shift ;;
        -mask) OPT=1 ;;
        -root) OP=1 ;;
        *)     break ;;
        esac

        shift
done

if [ -z "$cfg_file" ]
then
        echo "No config file given" >&2
        exit 1
fi

if [ -z "$file_name" ]
then
        echo "No file name given" >&2
        exit 1
fi

if [ -z "$run_num" ]
then
        echo "No run number given" >&2
        exit 1
fi

if [ "$OPT" -eq 1 ]
then
        ../bin/takeData -l -dir $file_name -trimVcal 60 -mask
        cd ../convert_to_tree/
        cp $file_name/phCalibrationFitTan_C0.dat $file_name/phCalibrationFit60_C0.dat
        cp $file_name/phCalibrationFit60_C0.dat ~/log/bt0500$run_num
        cp ../convert_to_tree/config.dat_original ~/log/bt0500$run_num
        ./convert_to_tree -l -r $run_num
        ./pulseHeightMain $run_num
fi

if [ "$OP" -eq 1 ] 
        then 
                cd ~/log/bt05r00$run_num 
                root -l 
else 
        ../bin/takeData -l -dir $file_name -trimVcal 60 
        cd ../convert_to_tree/ 
        ./Analyze.py --dir $file_name --cfg $cfg_file $run_num 
         
        if [ "$OP" -eq 1 ] 
        then 
                cd ~/log/bt0500$run_num 
                root -l 
        fi 
fi

Mostly correct but you're missing a 'fi' here and there. You're also missing the special #!/bin/sh first line which tells UNIX which shell to run this code with. It's possible your system uses /usr/bin/sh instead of /bin/sh, change as appropriate. I've highlighted fixes in red.
Quote:
I added another option to run the change directory and run root -l and I want to add a -h help option and print some stuff. I'm assuming I'd ad a -h) *something* ;;
Yep. It doesn't have to all be on one line, either. command1 ; command2 ; command3 is equivalent to
Code:
command1
command2
command3

;; on the other hand, is purely a case thing, you don't find it in other kinds of statements.

So, you can do

Code:
case "$something" in
-h)
        something
        something else
        yet more commands
        exit # to quit immediately, so it doesn't try to run commands below
        ;;
esac

'option' can even be a glob, i.e. if you wanted to match all strings beginning with 'opt', you could do opt*)

Last edited by Corona688; 05-24-2012 at 01:50 PM..
# 5  
are these proper corrections?:

if [ "$OPT" -eq 1 ]
then
../bin/takeData -l -dir $file_name -trimVcal 60 -mask
cd ../convert_to_tree/
cp $file_name/phCalibrationFitTan_C0.dat $file_name/phCalibrationFit60_C0.dat
cp $file_name/phCalibrationFit60_C0.dat ~/log/bt0500$run_num
cp ../convert_to_tree/config.dat_original ~/log/bt0500$run_num
./convert_to_tree -l -r $run_num
./pulseHeightMain $run_num
fi

if [ "$OP" -eq 1 ]
then
cd ~/log/bt05r00$run_num
root -l
fi
else
then
../bin/takeData -l -dir $file_name -trimVcal 60
cd ../convert_to_tree/
./Analyze.py --dir $file_name --cfg $cfg_file $run_num
fi

if [ "$OP" -eq 1 ]
then
cd ~/log/bt0500$run_num
root -l
fi
fi

---------- Post updated at 03:27 PM ---------- Previous update was at 02:05 PM ----------

Also on the -h argument that didn't get answered.
I'd add the:
-h) ____________ ;
I want to print a menu for all the optional arguments and what they do:
-dir *required* command followed by directory containing ROC's parameters.
-run *required* command followed by 4 digit run number.
-mask reads pixelMask.dat out of directory to mask pixels.
-cfg command followed by desired config file with full location.
-root will load root for run taken.
^Like that just for the sake of having it^
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Science: Mathematics
Difficulty: Medium
The proof for the Chinese Remainder Theorem used in Number Theory was NOT developed by its first publisher, Sun Tzu.
True or False?

8 More Discussions You Might Find Interesting

1. Post Here to Contact Site Administrators and Moderators

VIP Membership - The UNIX and Linux Forums - Get Your UNIX.COM Email Address Here

We work hard to make The UNIX and Linux Forums one of the best UNIX and Linux knowledge sources on the net. The site is certainly one of the top UNIX and Linux Q&A sites on the web. In order to provide certain members the best quality account services, you can now get some great extra features by... (2 Replies)
Discussion started by: Neo
2 Replies

2. Shell Programming and Scripting

File Transfer from Window server to UNIX and UNIX to UNIX

Dear All, Can someone help to command or program to transfer the file from windows to Unix server and from one unix server to another Unix server in secure way. I would request no samba client. (4 Replies)
Discussion started by: yadavricky
4 Replies

3. UNIX for Dummies Questions & Answers

How does unix system administration, unix programming, unix network programming differ?

How does unix system administration, unix programming, unix network programming differ? Please help. (0 Replies)
Discussion started by: thulasidharan2k
0 Replies

4. Shell Programming and Scripting

Batch job in unix server to move the pdf file from unix to windows.

Hi Experts, I have a requirement where i need to setup a batch job which runs everymonth and move the pdf files from unix server to windows servers. Could some body provide the inputs for this. and also please provide the inputs on how to map the network dirve in the unix like that... (1 Reply)
Discussion started by: ger199901
1 Replies

5. Shell Programming and Scripting

FTP script for sending a file from one unix directory to another unix server director

Hi, My local server is :/usr/abcd/ Remote server is :/Usr/host/test/ I want to send files from local unix directory(All files starting with O_999) to remote host unix directory. Can any body give me the Unix Shell script to do this. One more doubt: Shall we need to change the file... (1 Reply)
Discussion started by: raja_1234
1 Replies

6. UNIX for Advanced & Expert Users

missing Path(in UNIX) when i launch a job on to unix machine using windows SSh

hi i want run an unix application from a windows program/application.i am using SSH(command line version)to log on to a unix machine from windows. the application has to read a configuration file inorder to run. the configuration file .CFG is in bin in my home directory. but the application... (1 Reply)
Discussion started by: megastar
1 Replies

7. UNIX for Dummies Questions & Answers

Unix History Question: Why are filenames/dirnames case sentsitive in Unix?

I tried looking for the answer online and came up with only a few semi-answers as to why file and directory names are case sensitive in Unix. Right off the bat, I'll say this doesn't bother me. But I run into tons of Windows and OpenVMS admins in my day job who go batty when they have to deal... (3 Replies)
Discussion started by: deckard
3 Replies

8. UNIX for Dummies Questions & Answers

UNIX problem? Unix programm runs windows 2000 CPU over 100%

Okee problems...!! What is happening: Unix server with some programms, workstations are windows 2000, the workstations work good but when you start a programm on the Unix server the CPU of the workstations go to 100% usage resulting that the system gets very slow. The programm well its running so... (2 Replies)
Discussion started by: zerocool
2 Replies

Featured Tech Videos