Sponsored Content
Top Forums Programming Receiving JPEG packet from camera Post 302483107 by Corona688 on Thursday 23rd of December 2010 06:31:30 PM
Old 12-23-2010
That's a bit more helpful. You've opened the device with O_NDELAY, this means read might sometimes return -1, telling you to try again later. When this happens your code will still write something, even though it shouldn't.

Quote:
Seems to be a stream issue, how would I create the fread to fwrite stream using read to fwrite, which seems to not put the stream correctly.
You have to use read() for handling a device file.

Code:
int fd = open(DEVICE, O_RDWR | O_NOCTTY |O_NDELAY);
int out=open("outfile", O_CREAT|O_WRONLY, 0660);

while(1)
{
        ssize_t off=0;
        ssize_t res = read(fd,buf, BUFSIZE);
        // Ignore when read didn't get anything
        if(res < 0)
                continue;
        else if(res == 0) // should your app expect EOF?
        {
                fprintf(stderr, "EOF?\n");
                break;
        }

        fprintf(stderr, "Read %d bytes\n", (int)res);
        // buf[res] = 0; why null-terminate what's not a string?
        //parse(buf,res); we're not in pascal anymore

        // We can probably write everything at once.  when we don't,
        // just write the bits that didn't get written yet.
        while(off < res)
        {
                ssize_t w=write(outfd, buf+off, res-off);
                if(w > 0)
                        off += w;
                else
                {
                        perror("write error");
                        break;
                }
                fprintf(stderr, "Wrote %d bytes\n", (int)w);
        }
}

close(out);
close(fd);

In summary: Always check the return value of everything.
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Convert Jpeg to useable Unix Pics

I'm running a Sunblade 1500 with 2 XVR-100 video cards. I have Xinerama runing as well. Desktop is CDE. Can someone help me in converting Jpeg pictures so that I can use them as backdrops? Is there a way to make the picture come on both monitors instead of streaching it across both? Thanks. (1 Reply)
Discussion started by: HSTheDuck
1 Replies

2. UNIX for Advanced & Expert Users

Jpeg viewer on SunOS 5.8

I was wondering what program can i use instead of mozilla to view a picture on a sun solaris system running SunOS 5.8. To view a pic i'm currently doing it this way: xterm -sb -fn screen-bold -g 60x30+0-0 -title '%s window - pls quit window upon completion ' -e mozilla file:///usr/sailing.JPG ... (4 Replies)
Discussion started by: wisher115
4 Replies

3. UNIX for Dummies Questions & Answers

how do I view a jpeg?

I use gv or ggv to view a .pdf, or .ps file. What will allow me to see a jpeg file? If it matters, I'm using xterm on a PowerBook G4. (0 Replies)
Discussion started by: dsstamps
0 Replies

4. IP Networking

Problem Receiving the first OSPF packet

I trying to send and receive OSPF packets. I am using RAW Sockets(socket(AF_INET, SOCK_RAW, IPPROTO_OSPF)) to do this. I am successfully able to send an OSPF Hello packet however I am not able to receive a OSPF packet if I have not sent an OSPF packet earlier on the RAW SOCKET. Scenario: ... (3 Replies)
Discussion started by: cosmic_egg
3 Replies

5. UNIX Desktop Questions & Answers

problem with camera ID 0c45:613b Microdia Win2 PC Camera Ubuntu

Hi to all Like in the subject, i got the problem with camera ID 0c45:613b Microdia Win2 PC Camera under Ubuntu. When i plug in camera to USB, Ubuntu put in sn9c102 module, but on this site Linux Kernel Driver Database: CONFIG_USB_GSPCA_SONIXJ: SONIX JPEG USB Camera Driver is information that... (0 Replies)
Discussion started by: m0z4rt
0 Replies

6. Programming

How to insert JPEG on each side of the cube using openGL in C

Hi, how to insert JPEG on each side of the cube using OpenGL in C language.. i have a program for cube.. guide me ,,, any answer will valuable.. (3 Replies)
Discussion started by: Ravikishore
3 Replies

7. Shell Programming and Scripting

makefile to convert .jpeg to .png thumnails

Hello! I'm desperately trying to write a makefile that converts and scales jpeg files to png files in subdirectories I want to use netpbm, so I just need the commands: anytopnm pnmscale pnmtopng For various reasons i want to use a makefile. This is the first time i use the make tool... (1 Reply)
Discussion started by: henningbaer
1 Replies

8. Programming

Receiving broadcast packets using packet socket

Hello I try to send DHCP RENEW packets to the network and receive the responses. I broadcast the packet and I can see that it's successfully sent using Wireshark. But I have difficulties receiving the responses.I use packet sockets to catch the packets. I can see that there are responses to my... (0 Replies)
Discussion started by: xyzt
0 Replies

9. Shell Programming and Scripting

renaming jpeg files

Hi guys im currently trying to write a script which includes rename files and this is the part where i fail i have a list of files eg and i want to rename them so any help really would be appreciated Cheers dunryc (7 Replies)
Discussion started by: dunryc
7 Replies

10. AIX

Packet loss coming with big packet size ping

(5 Replies)
Discussion started by: Vishal_dba
5 Replies
sendfile(3EXT)						    Extended Library Functions						    sendfile(3EXT)

NAME
sendfile - send files over sockets or copy files to files SYNOPSIS
cc [ flag... ] file... -lsendfile [ library... ] #include <sys/sendfile.h> ssize_t sendfile(int out_fd, int in_fd, off_t *off, size_t len); DESCRIPTION
The sendfile() function copies data from in_fd to out_fd starting at offset off and of length len bytes. The in_fd argument should be a file descriptor to a regular file opened for reading. See open(2). The out_fd argument should be a file descriptor to a regular file opened for writing or to a connected AF_INET or AF_INET6 socket of SOCK_STREAM type. See socket(3SOCKET). The off argument is a pointer to a vari- able holding the input file pointer position from which the data will be read. After sendfile() has completed, the variable will be set to the offset of the byte following the last byte that was read. The sendfile() function does not modify the current file pointer of in_fd, but does modify the file pointer for out_fd if it is a regular file. The sendfile() function can also be used to send buffers by pointing in_fd to SFV_FD_SELF. RETURN VALUES
Upon successful completion, sendfile() returns the total number of bytes written to out_fd and also updates the offset to point to the byte that follows the last byte read. Otherwise, it returns -1, and errno is set to indicate the error. ERRORS
The sendfile() function will fail if: EAFNOSUPPORT The implementation does not support the specified address family for socket. EAGAIN Mandatory file or record locking is set on either the file descriptor or output file descriptor if it points at regular files. O_NDELAY or O_NONBLOCK is set, and there is a blocking record lock. An attempt has been made to write to a stream that cannot accept data with the O_NDELAY or the O_NONBLOCK flag set. EBADF The out_fd or in_fd argument is either not a valid file descriptor, out_fd is not opened for writing. or in_fd is not opened for reading. EINVAL The offset cannot be represented by the off_t structure, or the length is negative when cast to ssize_t. EIO An I/O error occurred while accessing the file system. ENOTCONN The socket is not connected. EOPNOTSUPP The socket type is not supported. EPIPE The out_fd argument is no longer connected to the peer endpoint. EINTR A signal was caught during the write operation and no data was transferred. USAGE
The sendfile() function has a transitional interface for 64-bit file offsets. See lf64(5). EXAMPLES
Example 1 Sending a Buffer Over a Socket The following example demonstrates how to send the buffer buf over a socket. At the end, it prints the number of bytes transferred over the socket from the buffer. It assumes that addr will be filled up appropriately, depending upon where to send the buffer. int tfd; off_t baddr; struct sockaddr_in sin; char buf[64 * 1024]; in_addr_t addr; size_t len; tfd = socket(AF_INET, SOCK_STREAM, 0); if (tfd == -1) { perror("socket"); exit(1); } sin.sin_family = AF_INET; sin.sin_addr.s_addr = addr; /* Fill in the appropriate address. */ sin.sin_port = htons(2345); if (connect(tfd, (struct sockaddr *)&sin, sizeof(sin))<0) { perror("connect"); exit(1); } baddr = (off_t)buf; len = sizeof(buf); while (len > 0) { ssize_t res; res = sendfile(tfd, SFV_FD_SELF, &baddr, len); if (res == -1) if (errno != EINTR) { perror("sendfile"); exit(1); } else continue; len -= res; } Example 2 Transferring Files to Sockets The following program demonstrates a transfer of files to sockets: int ffd, tfd; off_t off; struct sockaddr_in sin; in_addr_t addr; int len; struct stat stat_buf; ssize_t len; ffd = open("file", O_RDONLY); if (ffd == -1) { perror("open"); exit(1); } tfd = socket(AF_INET, SOCK_STREAM, 0); if (tfd == -1) { perror("socket"); exit(1); } sin.sin_family = AF_INET; sin.sin_addr = addr; /* Fill in the appropriate address. */ sin.sin_port = htons(2345); if (connect(tfd, (struct sockaddr *) &sin, sizeof(sin)) <0) { perror("connect"); exit(1); } if (fstat(ffd, &stat_buf) == -1) { perror("fstat"); exit(1); } len = stat_buf.st_size; while (len > 0) { ssize_t res; res = sendfile(tfd, ffd, &off, len); if (res == -1) if (errno != EINTR) { perror("sendfile"); exit(1); } else continue; len -= res; } ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Evolving | +-----------------------------+-----------------------------+ |MT-Level |MT-Safe | +-----------------------------+-----------------------------+ SEE ALSO
open(2), libsendfile(3LIB), sendfilev(3EXT), socket(3SOCKET), attributes(5), lf64(5) SunOS 5.11 31 May 2006 sendfile(3EXT)
All times are GMT -4. The time now is 10:32 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy