Sponsored Content
Homework and Emergencies Homework & Coursework Questions grep Simulation Using Only Unbuffered I/O - C Post 302514697 by Corona688 on Sunday 17th of April 2011 02:27:59 PM
Old 04-17-2011
read() doesn't add NULLs to the end of your array, so checking for NULL won't work. read() DOES return how many bytes it read, so you could just stop there instead, but --

read() doesn't stop at the end of a line, either. You should read one by one and check for newlines yourself. You could try something like this:

Code:
// reads a line of text in a manner sort of like fgets, and adds null.
// returns the # of bytes read, 0 means error.
int my_getline(int fd, char *buf, int max)
{
        int n;
        // read until end of file, or newline, or max
        for(n=0; n<(max-1); n++)
        {
                 ssize_t b=read(fd, buf+n, 1); // read one byte
                 if(b <= 0) // end of file or error
                 {
                         buf[n]='\0'; // add null
                         return(n);
                 }
                 if(buf[n] == '\n') // end of line
                 {
                         buf[n+1]='\0'; // add null AFTER \n
                         return(n);
                 }
        }

        buf[n]='\0';
        return(n);
}

This User Gave Thanks to Corona688 For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Help capturing and reformatting buffered and unbuffered output

Ok, so I have a shell script which runs a specific command, and that command sends it's output to the display. At certain times, the command sends buffered output, and at other times, the command sends unbuffered output in the form of a % progress bar, so if I run the command, the output I receive... (0 Replies)
Discussion started by: vikingshelmut
0 Replies

2. Programming

unbuffered streams.

#include "../ourhdr.h" int main(void) { int c; char *buf; setvbuf(stdin,buf,_IONBF,10); setvbuf(stdout,buf,_IONBF,10); while((c=getc(stdin)) != EOF) { if(putc(c,stdout) == EOF) err_sys("output... (2 Replies)
Discussion started by: gandhevinod
2 Replies

3. Windows & DOS: Issues & Discussions

unix simulation

hello everybody.. im new to this forum.. i have sme basic knowledge about unix.. but not too much.. i would like to practice shell programs n perl using a unix simulator.. but then i don't know wht a unix simulator means? just a bald definition that it creates a unix working environment in windows... (5 Replies)
Discussion started by: esash
5 Replies

4. Solaris

Results Load Simulation

If i simulate a load on a solaris system to choke the system to 90% CPU usage .. what is likely to increase .. my systems fan rpms, cpu temperature, power drawn .. Can anybody tell me (4 Replies)
Discussion started by: fugitive
4 Replies

5. Shell Programming and Scripting

Remote simulation and 'at' command

Hey, Task seems to be quite easy, but I'm still a bit green in shell scripting. I hope you can help me a bit. I have to run some simulation at the distance by remote terminal. Normally when I'm working on the server directly I just type: mpirun -np 8 compressibleInterFoam -parallel > log.txt... (7 Replies)
Discussion started by: PiPrus
7 Replies

6. Programming

Simulation using C/C++ and Java

Hi, I'm just start to learning simulate a network protocol using C/C++ and Java from scratch. Actually, I want to make two nodes can communicate using TCP and UDP protocol, for example http connection and video streaming, respectively. Can anyone help me find several references or guidance... (0 Replies)
Discussion started by: nica
0 Replies

7. UNIX and Linux Applications

2D collision simulation-programming

Hello, everybody, I'm thankful for the great helps you gave during the past year. Now I'm facing a serious problem: I was obliged to write a 2D collision simulation applet, and my experience is only in C,C++,Intelx86 assembly. I have no experience in Java and the like, and I don't know... (2 Replies)
Discussion started by: JackCrital2005
2 Replies

8. UNIX for Dummies Questions & Answers

Simulation of an ATM interface

Hi guys, I recently discovered this problem and any help would be great. 1) Create a file in vi named Accounts_File with the following data: The user, the name, the pin number, current balance and transaction history. There are 3 users who need to be inputted with all their PIN, etc... (1 Reply)
Discussion started by: Jimmy_c
1 Replies

9. IP Networking

OLSR simulation in ns2

# Create the simulator object that we need in order to run NS set ns # Set the parameters that we will use for wireless communications set val(chan) Channel/WirelessChannel ;# channel type set val(prop) Propagation/TwoRayGround ;# radio-propagation model set... (0 Replies)
Discussion started by: amithkhandakar
0 Replies

10. Cybersecurity

DDoS Simulation Tools

are there any popular DDoS simulation tools to test my own infrastructure? Anyone tried to setup all these in AWS EC2? (1 Reply)
Discussion started by: boriskong
1 Replies
gets(3C)						   Standard C Library Functions 						  gets(3C)

NAME
gets, fgets - get a string from a stream SYNOPSIS
#include <stdio.h> char *gets(char *s); char *fgets(char *s, int n, FILE *stream); DESCRIPTION
The gets() function reads bytes from the standard input stream (see Intro(3)), stdin, into the array pointed to by s, until a newline char- acter is read or an end-of-file condition is encountered. The newline character is discarded and the string is terminated with a null byte. If the length of an input line exceeds the size of s, indeterminate behavior may result. For this reason, it is strongly recommended that gets() be avoided in favor of fgets(). The fgets() function reads bytes from the stream into the array pointed to by s, until n-1 bytes are read, or a newline character is read and transferred to s, or an end-of-file condition is encountered. The string is then terminated with a null byte. The fgets() and gets() functions may mark the st_atime field of the file associated with stream for update. The st_atime field will be marked for update by the first successful execution of fgetc(3C), fgets(), fread(3C), fscanf(3C), getc(3C), getchar(3C), gets(), or scanf(3C) using stream that returns data not supplied by a prior call to ungetc(3C) or ungetwc(3C). RETURN VALUES
If end-of-file is encountered and no bytes have been read, no bytes are transferred to s and a null pointer is returned. For standard-con- forming (see standards(5)) applications, if the end-of-file indicator for the stream is set, no bytes are transferred to s and a null pointer is returned whether or not the stream is at end-of-file. If a read error occurs, such as trying to use these functions on a file that has not been opened for reading, a null pointer is returned and the error indicator for the stream is set. If end-of-file is encoun- tered, the EOF indicator for the stream is set. Otherwise s is returned. ERRORS
Refer to fgetc(3C). ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ |MT-Level |MT-Safe | +-----------------------------+-----------------------------+ SEE ALSO
lseek(2), read(2), ferror(3C), fgetc(3C), fgetwc(3C), fopen(3C), fread(3C), getchar(3C), scanf(3C), stdio(3C), ungetc(3C), ungetwc(3C), attributes(5), standards(5) SunOS 5.11 15 Oct 2003 gets(3C)
All times are GMT -4. The time now is 03:12 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy