From: "Андрій Мішковський" <mishok13@gmail.com>
To: Mateus Interciso <p.zarnick@gmail.com>
Cc: linux-c-programming@vger.kernel.org
Subject: Re: programming using system calls
Date: Tue, 31 Jul 2007 18:00:03 +0400 [thread overview]
Message-ID: <192840a00707310700l2536f183s66e05a6c9b072fd3@mail.gmail.com> (raw)
In-Reply-To: <f8n88c$hsu$1@sea.gmane.org>
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@gmail.com>:
> 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@vger.kernel.org
> 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.
next prev parent reply other threads:[~2007-07-31 14:00 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-31 11:27 programming using system calls nisa
2007-07-31 11:51 ` spiro harvey
[not found] ` <192840a00707310451s6a1b369eg632be924c8de1003@mail.gmail.com>
2007-07-31 11:53 ` Андрій Мішковський
2007-07-31 12:00 ` Mateus Interciso
2007-07-31 14:00 ` Андрій Мішковський [this message]
2007-07-31 14:13 ` Mateus Interciso
2007-08-10 14:53 ` Li YanBo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=192840a00707310700l2536f183s66e05a6c9b072fd3@mail.gmail.com \
--to=mishok13@gmail.com \
--cc=linux-c-programming@vger.kernel.org \
--cc=p.zarnick@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).