Visit The New, Modern Unix Linux Community


Returning Strings from C program to Unix shell script


 
Thread Tools Search this Thread
Top Forums Programming Returning Strings from C program to Unix shell script
# 1  
MySQL Returning Strings from C program to Unix shell script

Hi,
Iam calling a C program from a Unix shell script. The (C) program reads encrypted username/password from a text file , decrypts and returns the decrypted string.
Is there any way i can return the decrypted string to Unix shell program.
My shell script uses the output of the program to login to oracle DB.

C programs main() function returns int. How is it possible to return a String from a C program?

Please help me.

Thanks in advance.

Rao.
# 2  
The return value of the main() function is the exit status for the program, it should normally be 0 for correct completion or something differnt for error or special conditions.

Your shell script should not use this value as the output of the program, but rather to be sure that the program has completed successfully. Instead you should write the decrypted password to stdout and read that value from your script.

Code:
somewhere in your C code you would do:

printf("%s", decrypted_password);

make sure that this is the only output from the program.

in your script you would then have something like :
The script snippet here assumes you are using ksh/bash
Code:
...
clear_text_password=$(my_C_program)
if [[ $? -eq 0 ]] ; then
     #The password was returned correctly
     #Do whatever you like here
     echo "The decrypted value is: ${clear_text_password}
else
     echo "Password decryption failed"
     exit 1
fi

# 3  
Thank you very much reborg.
I am going to follow whatever approach you suggested. I have a small concern here. In future, if some one comes and adds one more printf to the program (for debugging purpose), the script won't function properly right??

Is it possible to write the output values to a common memory which can be used by Unix shell as well as C program. Once the C program writes the output to that common memory , can Unix pick the values?
Since the program deals with passwords I can't write the output to a temp text file so that shell script reads the file and delete it.

How about writing the values to environment variables from C and accessing from Unix?

Iam new to Unix and C, please correct me if my questions are dumb.

Thanks
Rao.
# 4  
That's not really the way things are done in Unix.

There is an old tenet in Unix programming which says, if you have nothing to say don't say anything, in other words if there is no reason for output from your program don't have any. So taking that into account you should not have any debugging output.

That said you could make sure you have the correct information by making sure the outut of the "correct" printf has a well defined format, by prefixing it with something, like this.

Code:
printf("DECRYPTED_DATA %s", decrypted_password);

he the script would for example become
Code:
clear_text_password=$(my_C_program | awk '/DECRYPTED_DATA/{print $2}' )
if [[ $? -eq 0 ]] ; then
     #The password was returned correctly
     #Do whatever you like here
     echo "The decrypted value is: ${clear_text_password}
else
     echo "Password decryption failed"
     exit 1
fi

# 5  
Debug output should go to stderr, not stdout.
# 6  
Quote:
Originally Posted by Perderabo
Debug output should go to stderr, not stdout.
Very true, I did provide the alternative because I think the concern was that additional output might be added to the program by someone lazy or not sufficiently informed as to know that.

satguyz, you should read up on the use of stdout and stderr for both your application and your shell script.
# 7  
Thanks for the clarification.

Rao.

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

Test Your Knowledge in Computers #866
Difficulty: Easy
Lisp and Fortran are the two oldest high-level programming language still in widespread use today.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Control not returning from Sqlplus to calling UNIX shell script.

Hello All, I have exactly same issue @vikas_trl had in following link: https://www.unix.com/shell-programming-and-scripting/259854-control-not-returning-sqlplus-calling-unix-shell-script.html I wonder if he or somebody else could find the issue's cause or the solution. Any help would... (4 Replies)
Discussion started by: RicardoQ
4 Replies

2. Shell Programming and Scripting

Control not returning from Sqlplus to calling UNIX shell script.

Hello All, I have a UNIX script which will prepare anonymous oracle pl/sql block in a temporary file in run time and passes this file to sqlplus as given below. cat > $v_Input_File 2>>$v_Log << EOF BEGIN EXECUTE IMMEDIATE 'ALTER SESSION FORCE PARALLEL DML PARALLEL 16'; EXECUTE... (1 Reply)
Discussion started by: vikas_trl
1 Replies

3. Shell Programming and Scripting

Control from UNIX script is not returning to the Parent program

Hi All, My program flow is as below Windows batch -- > Cygwin batch --> zsh script There are multiple Cygwin batch scripts that are called from Windows batch file . But when i am executing the first cygwin batch script the control goes to the zsh file and executes and stoping from... (1 Reply)
Discussion started by: Hypesslearner
1 Replies

4. Shell Programming and Scripting

how to execute a unix shell script from a java program

Hi All, well , i am facing this problem.. i have tried a few sample codes but there isn't any solution . could anyone please give a sample code as of how to do this... Please see the below details...and read the details carefully. I have written some code, logic is 1)from... (4 Replies)
Discussion started by: aish11
4 Replies

5. Shell Programming and Scripting

Returning to shell from previous script

Found myself stuck on this seemingly trivial issue. I have this script which call other shell files to do their deeds. The shell files in turn call some other programs as well. My problem is that in two of these shell files, the control doesnt return to next command in script unless the Enter key... (2 Replies)
Discussion started by: DoesntMatter
2 Replies

6. Shell Programming and Scripting

Can we pass an array of strings from a Perl Program to a Shell Script?

Hi Folks, The subject is my question: Can we pass an array of strings from a Perl Program to a Shell Script? Please provide some sample code. Thanks ---------- Post updated at 11:52 PM ---------- Previous update was at 11:43 PM ---------- I got it. Its here:... (0 Replies)
Discussion started by: som.nitk
0 Replies

7. AIX

The shell script is not returning proper result

Can anybody pls look into this script and tell me where I went wrong. After running this script, it is showing like "Trying to overlay current working directory ABORT!!!" :-( ARGCNT=$# if then echo "Two parameters are needed for this shell " echo "Please try again with... (1 Reply)
Discussion started by: clnsharma123
1 Replies

8. Programming

Returning Strings from C program to Unix shell script

Hi, I'm having a requirement where I need to call a C program from a shell script and return the value from the C program to shell script. I refered a thread in this forum. But using that command in the code, it is throwing an error clear_text_password=$(get_password) Error: bash:... (24 Replies)
Discussion started by: venkatesh_sasi
24 Replies

9. Shell Programming and Scripting

shell program for sorting strings in an alphabetical order

Hi, I trying to find the solution for writing the programming in unix by shell programming for sorting thr string in alphabetical order. I getting diffculty in that ,, so i want to find out the solution for that Please do needful Thanks Bhagyesh (1 Reply)
Discussion started by: bp_vanarse
1 Replies

10. Shell Programming and Scripting

Returning Values (shell Script)

I have an application on Informix 4GL, and I am invoking the shell script from the program, but I need to know if the shell script work fine or not, in order to continue the process. I know that we can use $? to get the final status but this is on unix command. How can I return a value from the... (3 Replies)
Discussion started by: jennifer01
3 Replies

Featured Tech Videos