[Quick question]Problem with execl and GREP


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers [Quick question]Problem with execl and GREP
# 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

Test Your Knowledge in Computers #401
Difficulty: Medium
The 3D printing process builds a three-dimensional object from a computer-aided design (CAD) model.
True or False?

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. 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

5. Shell Programming and Scripting

quick question

does anyone know what $? means? i echoed it on my box (running AIX Korn shell) and got 127 (2 Replies)
Discussion started by: penfold
2 Replies

6. 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

7. UNIX for Dummies Questions & Answers

Another quick question

Hi guys sed -e "s/$<//g" the $< can allow me to assign an input value to the variable right? do the double quotes check the previous context? (1 Reply)
Discussion started by: hamoudzz
1 Replies

8. UNIX for Dummies Questions & Answers

quick question

hi guys trying to understand what this line means sed is a stream editor and i understand that, i have a file already selected i want to edit so i use -e sed -e the next stesp is s/$* s is a subsititute replacement sed -e s/$*//g $ is in reference of the last line /g makes it... (2 Replies)
Discussion started by: hamoudzz
2 Replies

9. Shell Programming and Scripting

A very quick question

Just a super quick question: how do you put a link in your php code. I want to make a link to something in /tmp directory. i.e. how do you put a href into php, I think it's done a bit differently. thanks john (1 Reply)
Discussion started by: jmg5
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