Sponsored Content
Full Discussion: No error but not executing
Top Forums Programming No error but not executing Post 302479393 by Corona688 on Friday 10th of December 2010 01:30:47 PM
Old 12-10-2010
Code:
#include<stdio.h>
#include<sys/types.h>
#include<sys/mman.h>
#include<stdlib.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<unistd.h>
#include<signal.h>
#include<string.h>

main(int argc, char *argv[])
{
        int fd,changes,i,random_spot,kids[2];
        struct stat buf;
        char *the_file,*starting_string="Finally got it! \n";
        size_t length=strlen(the_file);

strlen(the_file) will either crash or return garbage when you give it a variable you didn't initialize. the_file could contain anything at that point.

You don't ever set the_file to a string anyway, so strlen() will still return garbage or crash even after you initialize it. Remember, not all arrays are strings! Your file will contain:

Finally got it! \n while a string contains Finally got it! \n\0 The \0 is how strlen() knows where the string ends, the compiler adds it to the end of things in double-quotes for you. strlen() doesn't count it in the length either, so you never write it.

You don't need length anyway. buf.st_size already tells you the exact size of the file.

Code:
size_t starting=strlen(starting_string);
if (argc!=2)
{
fprintf(stderr, "Usage %s file_name \n",*argv);
exit(1);
}
if((fd=open(argv[1], O_CREAT | O_RDWR,0666))<0)
{
fprintf(stderr,"open error on file %s\n",*argv);
exit(3);
}
write(fd,starting_string,starting);
if(fstat(fd,&buf)<0)
{
fprintf(stderr,"fstat error on file %s\n",*argv);
exit(4);
}
if((the_file=mmap(0,(size_t)
buf.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0))==(caddr_t)-1)

(caddr_t)-1 should be MAP_FAILED.
Code:
{
fprintf(stderr,"mmap failure\n");
exit(5);
}

for(i=0;i<length;++i)
{
if(*(the_file+i)>='0' && *(the_file+i)<='9')
*(the_file+i)='*';
sleep(1);
}

replace 'length' with buf.st_size. strlen() can't tell you how long a file is, but fstat already did.

*(the_file+i) can be written much more clearly as the_file[i]
Code:
printf("Parent done with changes\n");
 printf("The file now contains:\n%s\n",the_file);

the_file is still not a string. You can't print it with %s because printf won't know where the text ends. You do know the file size, though, which will let you write it instead. write(STDOUT_FILENO, the_file, buf.st_size);
Code:
exit(0);
}


Last edited by Corona688; 12-10-2010 at 02:36 PM..
This User Gave Thanks to Corona688 For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

error while executing the script

Hello I am executing the following script nawk 'NR == 1 || substr($0,63,5) ~ /H... / && \ _++ == 2 { fn && close(fn); fn = "part_" ++c; _ = 1 } { print > fn }' sample.dat When i execute as it is it is executing fine. but when i execute the whole script as a single line like below ... (2 Replies)
Discussion started by: dsdev_123
2 Replies

2. Shell Programming and Scripting

Error while executing a script

My script is as below : #!/bin/sh for line in `cat Results.txt` do FEILD1=`echo $line |awk -F"|" '{print $1}'` FEILD2=`echo $line |awk -F"|" '{print $2}'` FEILD3=`echo $line |awk -F"|" '{print $3}'` FEILD4=`echo $line |awk -F"|" '{print $4}'` echo "$FEILD1 $FIELD2 $FIELD3 $FIELD4" done ... (15 Replies)
Discussion started by: shwetainnani
15 Replies

3. UNIX for Dummies Questions & Answers

Error Executing the script.

Hi , I m getting an error after executing the script. My script. Script is used to find out the date on 8 different machines(mentioned in SERVERNAMES file). I have added public key to avoid ssh password and ssh without password working fine. #!/bin/sh fn_VMFind() { Date=`ssh -t... (5 Replies)
Discussion started by: pinga123
5 Replies

4. Programming

No error but not executing

Hi friends NO errors, but when I try to execute the program it gets struck. Can any one find it out. #include<stdio.h> #include<sys/types.h> #include<sys/mman.h> #include<stdlib.h> #include<fcntl.h> #include<sys/stat.h> #include<unistd.h> #include<signal.h> #include<string.h> ... (0 Replies)
Discussion started by: gokult
0 Replies

5. Shell Programming and Scripting

Error executing script

Please delete de thread. Thanks. (10 Replies)
Discussion started by: Rodrih92
10 Replies

6. Shell Programming and Scripting

Error while executing sh command

Hi, I have 2 files temp1.sh and temp2.sh as follows: =========== temp1.sh =========== echo "session1" sh temp2.sh echo "exit session2 and enter session1" ================================= ============= temp2.sh ============= echo "session2" sh echo "exit session2"... (5 Replies)
Discussion started by: RP09
5 Replies

7. Linux

Error executing a variable

greetings, i'll try to keep this simple... i have a script that sets up my environment and creates a command line variable to execute. when i execute the variable i get an error telling me it cannot open one of the files on the command line. the error prints a file name that is definitely... (7 Replies)
Discussion started by: crimso
7 Replies

8. UNIX for Dummies Questions & Answers

Error executing the script

I have the following script test.sh owned by dwdev account and group dwdev, the permissions on the script are as follows. -rw-r-x--- 1 dwdev dwdev 279 Sep 17 13:19 test.sh Groups: cat /etc/group | grep dwdev dwdev:x:704:dwdev dwgroup:x:725:dwdev writers:x:726:dwdev User: cat /etc/passwd |... (3 Replies)
Discussion started by: Ariean
3 Replies

9. Programming

Error in executing the C program

Hello Friends, I have written a code for the unisex bathroom which makes a policy that when a woman is in the bathroom only other women may enter, but not men, and vice versa. This program consists of four functions which a user defines but these functions are not properly working while... (4 Replies)
Discussion started by: Ravi Tej
4 Replies

10. Red Hat

Error when executing script

Hi, I wrote this script to test if the output for DIR1 and DIR2 comes out as I want : #!/bin/bash DAY=$(date +%d) MONTH=$(date +%b) YEAR=$(date +%Y) DIR1=$($MONTH$YEAR"_Blast_BC01") DIR2=$($MONTH$YEAR"_Blast_BC15") echo $DIR1 echo $DIR2 This is the output I want for echo $DIR1 ... (12 Replies)
Discussion started by: anaigini45
12 Replies
All times are GMT -4. The time now is 08:53 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy