Need help with running the tar command using system() call in C


 
Thread Tools Search this Thread
Top Forums Programming Need help with running the tar command using system() call in C
# 1  
Old 11-10-2008
Need help with running the tar command using system() call in C

Hey everyone,

I've been trying to use the system(cmd) call in C to tar multiple files together.
When i do so i specify the absolute paths of the tar file as well as the files to be included in the tar file.

Eg: system("tar -cf /tmp/example.tar /mnt/john/1.xml");
system("tar -uf /tmp/example.tar /mnt/john/2.xml");
system("tar -uf /tmp/example.tar /mnt/john/3.xml");

I was expecting that upon extraction of example.tar i'd get 1.xml,2.xml and 3.xml. However upon extraction 'mnt' and 'john' directories are again created in the extraction directory and inside these reside the desired xml files.

Is there a way i can prevent these directories from being created and get only the xml files upon extraction?

Thanks.
# 2  
Old 11-10-2008
tar always preserves paths, so the only way to do what you want is to change to the directory where the files are, and add them from there using just thier name not path/name
Code:
system("tar -cf /tmp/example.tar 1.xml");
system("tar -uf /tmp/example.tar 2.xml");
system("tar -uf /tmp/example.tar 3.xml");

so either run your C program from the directory where the files are, or set that as being the current directory before issuing the system call
# 3  
Old 11-10-2008
Thanks Wempy !
How do i change the current directory using C ?

Does system("cd /mnt/john/"); work?
or do i use the chroot() system call ? But this would alter the system's root directory. I could change it back to / again though when my process is terminated.

Which one's preferred here?
# 4  
Old 11-10-2008
chroot is not what you want, it changes the / path to be the named dir, so any subsequent calls will have that as their / path - not a good idea

chdir() is what you need
man 2 chdir will give you information on chdir (on a linux machine anyway)
# 5  
Old 11-10-2008
Ahh..didn't know about this call at all.

Thanks so much man! Really appreciate it.
# 6  
Old 11-10-2008
Make sure you check result code, also take care of error/warning that tar spits out on stderr
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

tar command to explore multiple layers of tar and tar.gz files

Hi all, I have a tar file and inside that tar file is a folder with additional tar.gz files. What I want to do is look inside the first tar file and then find the second tar file I'm looking for, look inside that tar.gz file to find a certain directory. I'm encountering issues by trying to... (1 Reply)
Discussion started by: bashnewbee
1 Replies

2. Shell Programming and Scripting

Not correct processing of “\ “ in names of dirs inside shell script (tar command - system backup scr

Hello, Recently, I've started with shell scripting, and decided to write a script for my system backup using tar. When I was dealing with tar execution inside shell script I found this, inside shell we have the following code: tar $TAR_PARAMS $ARCHIVE_FILE $EXCLUDE $BACKUP_STARTwith... (6 Replies)
Discussion started by: ilnar
6 Replies

3. Programming

need help with system call

hi everyone i wrote a system call and compiled the kernel succesfully... my system call is in a file in the kernel folder named my_syscall1.c (kernel/my_syscall1.c) the header file for this system call i added it in the folder include like this include/my_syscall1/my_syscall1.h my problem is... (2 Replies)
Discussion started by: demis87
2 Replies

4. Shell Programming and Scripting

How to call the System command twice in the same perl script...

Hello experts, I have a perl script which looks for the ARGV and then loads the data as per it. Example. #Checking the server to connect if ($ARGV eq 'QA') { $ENV{"ORACLE_HOME"} = "/oracle/product/11.2.0"; $ENV{"PATH"} = "$ENV{'PATH'}:/oracle/product/11.2.0/bin"; ... (1 Reply)
Discussion started by: msrahman
1 Replies

5. Shell Programming and Scripting

Running a script in system() call and want the script's output

Hi All, I have a script(sample.sh) displaying the output of "dd" command. Now i am using this script in system() call as, system("sh sample.sh") in an application file. I want the output of system("sh sample.sh") in the application file itself. How can i get it? Many thnaks.... (9 Replies)
Discussion started by: amio
9 Replies

6. Programming

how to call dot c file using system command

Hi every one, i have to dot pc files. One have main function but one dont have.I have to call dot pc file using system () cmd.File is being call have main function.Please let me know how i can call .pc file with two arguments from other dot pc file.I want some thing like sprintf(buf, "ss_xxx.pc... (4 Replies)
Discussion started by: goraya430
4 Replies

7. Shell Programming and Scripting

how to call dot c file using system command

Hi every one, i have to dot pc files. One have main function but one dont have.I have to call dot pc file using system () cmd.File is being call have main function.Please let me know how i can call .pc file with two arguments from other dot pc file.I want some thing like sprintf(buf,... (1 Reply)
Discussion started by: goraya430
1 Replies

8. Shell Programming and Scripting

tar command dont tar to original directory

HI, if I have a tarfile called pmapdata.tar that contains tar -tvf pmapdata.tar -rw-r--r-- 0/0 21 Oct 15 11:00 2009 /var/tmp/pmapdata/pmap4628.txt -rw-r--r-- 0/0 21 Oct 14 20:00 2009 /var/tmp/pmapdata/pmap23752.txt -rw-r--r-- 0/0 1625 Oct 13 20:00 2009... (1 Reply)
Discussion started by: borderblaster
1 Replies

9. UNIX for Advanced & Expert Users

how to differentiate system call from library call

Hi, Ho do I differentiate system call from library call? for example if I am using chmod , how do I find out if it is a system call or library call? Thanks Muru (2 Replies)
Discussion started by: muru
2 Replies

10. Programming

nice command and nice() system call

Hi I want to implement the nice command in the shell that I am building. I came to know that there is a corresponding nice() system call for the same. But since I will be forking different processes to run different commands typed on the command prompt, is there any way I can make a command... (2 Replies)
Discussion started by: tejbuch
2 Replies
Login or Register to Ask a Question