![]() |
|
|
google unix.com
|
|||||||
| Forums | Casino | Register | Forum Rules | Links | Albums | FAQ | Members List | Search | Today's Posts | Mark Forums Read |
| High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| checking for non-zero value | philplasma | UNIX for Dummies Questions & Answers | 6 | 01-08-2008 03:51 PM |
| checking uid | filthymonk | Shell Programming and Scripting | 7 | 07-19-2007 10:40 PM |
| Checking cp progress | MarGur | UNIX for Dummies Questions & Answers | 0 | 05-15-2007 04:13 PM |
| Checking for PXE | maestro@altiris | SUN Solaris | 5 | 05-25-2004 12:06 AM |
![]() |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|||
|
Hi,
I am practicing exercise programs with System calls. Exercise Question: write a pogram to accept a filename from the user. The program should write ecery fifth byte of the file to the standard output. My Program : # include <stdio.h> # include <fcntl.h> # include <error.h> main() { int fd,first_offset=5,move_offset=0,x=1; char a,name[20]; scanf("%s",name); fd = open(name,O_RDONLY,0755); printf("fd is %d",fd); if(fd==-1) { printf("error"); exit(1); } while(x<5) { move_offset=move_offset+first_offset; lseek(fd,move_offset-1,0); read(fd,name,sizeof(name)); write(1,name,1); x++; } } Output: [ramki@lindesk3 sysint_ex]$ cc ex1.c -o ex1 [ramki@lindesk3 sysint_ex]$ ./ex1 ./test FIVEfd is 3 The file "Test" content: abcdFfghiIklmnVpqrsE My Question Now: 1. in the program, I used a While loop with an varaible "X" and comparing it to random no of my choice 5 . Instead I want to check the EOF condition in the whilepart. How to check that. If we are using file pointer and fopen fn, we can use while(feof(fp)==0). But here we used syatem calls and I don know how to check the condition here. 2. In te program output, I found "FIVE" before printing the filedescriptor number. But as per my program flow, fd should be printed first and then the output "FIVE". 3.Is there any othet way of writing the program more simple and precise, especially using piointer for getting the name of the file, instaed of using Array. Please Help... Thanks, Ramkrix |
| Sponsored Links |
|
|||
|
Quote:
Code:
#include <stdio.h>
main(int argc, char *argv[])
{
char *infile;
FILE *stream;
infile = argv[1];
stream = fopen(infile, "r");
}
|
|
|||
|
Thanks for your reply shamrock..
Is tis the way, I need to include the condition in while loop: while(feof(stream)==0) One more question to you: instead of using command line args and C library fns can we check this by having the program absolute system calls.. Thanks in advance, Ramkrix |
|
|||
|
Quote:
The system call approach is better for reading 5 bytes at a time from the input file and printing the fifth byte to standard output. This method is preferred over incrementing a counter and repeatedly testing if x < 5 or checking for EOF using the feof() standard lib function. Code:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
main(int argc, char *argv[])
{
int fd;
char name[5];
fd = open("/path/to/input/file", O_RDONLY);
while (read(fd, (void *) name, (size_t) 5) == 5)
printf("the fifth byte is %c\n", name[4]);
}
|
|
|||
|
Once Again thanks for the useful info Shamrock.
let me ask you the last ques from your reply: while (read(fd, (void *) name, (size_t) 5) == 5) The "(size_t)5", what does it mean and will it do?Bcoz i read from a book that we need to give the sizeof() operator at the end. Also you are comaparing it to value "==5"? I could not understand here. The below one is what I coded in my program: read(fd,name,sizeof(name)); Was mine a right one? |
|
|||
|
Thanks fmurphy for your reply.
if I have a structure defined at the beginning in another prgm instaed of an char array name[20],can I use like this? struct bio { char name[20]; int age; float salary; } main() { struct bio mydata; -------- -------- -------- read(fd, &mydata, (size_t) )) } How can we use the size_t with structure? Thanks in Advance.. Ramkrix |
|||
| Google The UNIX and Linux Forums |
![]() |
| Bookmarks |
| Tags |
| None |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|