Re: programming using system calls

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Mateus.
Maybe it looks rude, but i want to correct you:
fread, feof, fopen are _not_ system calls, as i remember.
Your example is correct, but it makes no use of system calls. Your
code is pure ISO C. :)
Considering this, the program should look like this:

#include <unistd.h> /*read(), close()*/
#include <fcntl.h> /*open()*/
#include <stdio.h> /*fprintf()*/
#include <sys/types.h> /**/
#include <errno.h> /* errno*/
#include <string.h> /* strerror(), memset()*/

int
main(int argc, char **argv)
{
	int fd; /*file descriptor*/
	char buf[BUFSIZ]; /*buffer for reading data*/
	int bytes_read = -1; /*bytes, already read from file*/
	
	if (argc != 2)
	{
		fprintf(stderr, "Usage: %s <file>\n", argv[0]);
		return 1;
	}
	
	fd = open (argv[1], O_RDONLY);
	if (fd == -1)
	{
		fprintf(stderr, "%s: open() failed. Reason: %s", argv[0], strerror(errno));
		return 1;
	}
	
	while (bytes_read != 0)
	{
		bytes_read = read(fd, buf, BUFSIZ);
		if (bytes_read == -1)
		{
			fprintf(stderr, "%s: read() failed. Reason: %s", argv[0], strerror(errno));
			close(fd);
			return 1;
		}
		fprintf(stdout, "%s", buf);
		memset(buf, 0, BUFSIZ);
	}
	
	close(fd);
	
	return 0;
}

2007/7/31, Mateus Interciso <p.zarnick@xxxxxxxxx>:
> On Tue, 31 Jul 2007 04:27:13 -0700, nisa wrote:
>
> > hi,
> > i am quite new to programming using system calls and would like a basic
> > idea regarding the usage of system calls.
> > i would like assistance in the following area of c programming in linux:
> > 1.how to open a text file ,read data and print the data on console using
> > system calls
> > 2.create a text file and write some data 3.read data from a file and
> > append that data to another file using lseek() 4.creation of a parent
> > and child process using fork()
>
> Well, just to not let you in blank, here is a VERY simple file that reads
> a text file, and output it to the screen
>
> #include <stdio.h>  //standard IO
> #include <stdlib.h> //for reading files
> #include <string.h> //for memset
> #include <errno.h>  //for errno
> int main(int argc, char *argv[]){
>   FILE *fp = NULL;
>   char ch[1];
>
>   if(argc!=2){
>     fprintf(stderr,"Usage:%s <file>\n",argv[0]);
>     return 1;
>   }
>   memset(ch,'\0',sizeof(char)*1);
>   if((fp=fopen(argv[1],"r"))==NULL){
>     perror("fopen");
>     return errno;
>   }
>   while(feof(fp)==0){
>     if( (fread(ch,sizeof(char),1,fp)==0) && (feof(fp)==0) ){
>       perror("fread");
>       fclose(fp);
>       memset(ch,'\0',sizeof(char)*1);
>       return errno;
>     }
>     fprintf(stdout,"%c",ch[0]);
>   }
>   fclose(fp);
>   memset(ch,'\0',sizeof(char)*1);
>   return 0;
> }
>
> Also, as it was stated before, use the man pages. If you don't have a
> Linux box, then google will be your friend for this.
> In this example, you would need, the man pages for fopen(),fread() and
> feof().
>
> Good luck.
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>


-- 
Wbr, Andriy Mishkovskyy.

He's got a heart of a little child, and he keeps it in a jar on his desk.
-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Assembler]     [Git]     [Kernel List]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [C Programming]     [Yosemite Campsites]     [Yosemite News]     [GCC Help]

  Powered by Linux