[Quick question]Problem with execl and GREP


 
Thread Tools Search this Thread
# 1  
[Quick question]Problem with execl and GREP

Guys, I have the following code
Code:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>

void read2();
main(int argc, char** argv)
{
int pid,status;
    pid=fork();
    if ( pid == 0 )
    {
        read2(argv[1], argv[2]);
        exit(0);    
    }
    else
    wait(&status);
}

void read2(char * file, char * stringa)
{
    printf("%s, %s\n",file, stringa);
    execl("grep", "grep", "-c", stringa, file, (char *)0);
        
}

Why I don't see any outputs on the screen when I run my program ?
usying any .txt file I should get on stdout ( screen ) the number of lines that "stringa" shows up. But I don't.

What am I doing wrong ? A friend of mine tryied in his computer and it worked. Why it doesn't work in mine ?
# 2  
Please post what Operating System and version you are running and what Operating System and version your friend is running.
Please post what commands were used to compile the program on each computer.
This User Gave Thanks to methyl For This Post:
# 3  
A few items that stand out:
* execl will not do path lookup for "grep".
* read2 prototype doesn't agree with its definition
* fork returns pid_t which you are assigning to an int.

Either your friend mistook printf output for success or they had grep in the current working directory.

Regards,
Alister
This User Gave Thanks to alister For This Post:
# 4  
Quote:
Originally Posted by alister
A few items that stand out:
* execl will not do path lookup for "grep".
* read2 prototype doesn't agree with its definition
* fork returns pid_t which you are assigning to an int.

Either your friend mistook printf output for success or they had grep in the current working directory.

Regards,
Alister
I'm using ubuntu 11.04 and compiling with: "gcc filename.c -o filename" or "gcc -g filename.c -o filename " when I have to debug using GDB.

Alister, can you explain me what you meant by
* execl will not do path lookup for "grep".
* read2 prototype doesn't agree with its definition
?

When I use perror I get an error "No such file or directory".
I don't understand why because when I launch the terminal and use "ls" to list all the files, of course I see the file I'm calling the program with. However even if I change the file name for another one or either the file source I still get the same error.

grep works like that, right ? GREP -C PATTERN FILE

so my command line is execl("usr/bin/grep", "grep", "-c", stringa, file, NULL); its supposed to execute GREP -C STRING FILE
but I still get the error.

does anyone can explain me why I'm so blind that I can't see where the problem is ?
# 5  
When their first argument ("grep", for example) does not contain any slashes, execlp/execvp/execvpe (note the "p" in all of them) will search for the executable in directories listed in the PATH environment variable.

In your first post, you're using execl, which will not search PATH. So, if execl doesn't find "grep" in the current working directory, it fails.

In your most recent post, you're using a relative path, usr/bin/grep. You almost certainly intended to use an absolute path. Add a leading slash: /usr/bin/grep.

Regards,
Alister
 

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

10 More Discussions You Might Find Interesting

1. Programming

Question about execl, replacing process's contents

I'm reading Operating Systems in Depth by Thomas W. Doeppner, and I have a question about execl. He says it's called after fork(), and that it replaces the text (code) of the current process and replaces it with the code of the new program. But that doesn't make sense to me. Does that mean... (4 Replies)
Discussion started by: SirSalt
4 Replies

2. Shell Programming and Scripting

Quick help on grep -w please

Hello Experts, Here is my problem.. cat abc.txt 1,"nathan available" 2,"MW nathan available" 3,"HW nathan available" How can i grep for "nathan available" alone. I tried grep -w "nathan available" Problem is that the pattern is enclosed in Quotes " ". I know we can do grep... (2 Replies)
Discussion started by: sathyaonnuix
2 Replies

3. UNIX for Dummies Questions & Answers

problem using execl to start a tftp process

Hi, I'm very new to Linux but have been muddling my way through quite happily until recently. I'm trying to write a program in C++ which starts a new process using the execl command. I am trying to run the tftp process as follows: char ip_addr = "..."; if (execl("usr/bin/tftp", "tftp",... (2 Replies)
Discussion started by: JoC
2 Replies

4. UNIX for Dummies Questions & Answers

Quick question.

I'd like to list all userid's on the system that have a .bashrc file in their home directory with a command like "cat /etc/passwd | grep -f", however I'm not quite familiar with using grep. Any suggestions? (2 Replies)
Discussion started by: raidkridley
2 Replies

5. Shell Programming and Scripting

Quick question on grep: grabbing lines above and below

Just a quick question on grep/egrep. I am writing a shell script that is looking for certain strings in a text file. It works well and gets exactly what I need. However, the way the program writes to the text file, it puts the timestamp in a line above the string I am looking for and the path... (3 Replies)
Discussion started by: thecoffeeguy
3 Replies

6. UNIX for Dummies Questions & Answers

Quick question

Hello all, Quick question from a fairly new to Unix developer. if then completedLogFile=$logfile.$(date +%Y%m%d-%H:%M:%S) mv $logfile $completedLogFile fi I understand that this portion of code is simply copying a tmp logfile to a completed logfile when a condition is true. The... (2 Replies)
Discussion started by: JohnnyBoy
2 Replies

7. UNIX for Dummies Questions & Answers

Quick question

Hi, Is there a simple way, using ksh, to find the byte position in a file that a stated character appears? Many thanks Helen (2 Replies)
Discussion started by: Bab00shka
2 Replies

8. UNIX for Dummies Questions & Answers

Quick Question

Hi, I am new to UNIX, and am learning from this tutorial : http://www.ee.surrey.ac.uk/Teaching/Unix/index.html It keeps telling me to files downloaded from the internet (like .txt files) to the directory, and I dont know how to. How do I add .txt files to my directory? Thanks. (6 Replies)
Discussion started by: IAMTHEEVILBEAN
6 Replies

9. UNIX for Dummies Questions & Answers

Quick Grep question

Is it possible to grep for two words at once? I want to grep for the words SEVERE or FATAL. Thanks. (1 Reply)
Discussion started by: ssmiths001
1 Replies

10. UNIX for Dummies Questions & Answers

Quick Question

I know in DOS, when you want to pull up your last/previous command, you hit the up/down arrows. How do you do that with UNIX? (3 Replies)
Discussion started by: Tracy Hunt
3 Replies

Featured Tech Videos