I am playing around with the read(), write(), and open() system calls. I wrote a function to open/create 3 files, a function to write a test message to the files, and a file to read and print to the terminal what is in the files.
The open and write system calls work fine, if I cat the files they display exactly what they should. When I try to read from the files though my reads are always returning 0, and so not displaying anything from the file.
I tried running the program once, then commenting out the write function. When I do this the read function will read from the files, but the output is unfortunately garbage. I seem to have this sort of trouble when using the read system call and would very much appreciate any help so I can use them properly.
Here are the open and read functions, I have code in the read function to check the values of the fd that the pointers hold and they are correct.
Code:int openfiles(int *fdp1, int *fdp2, int *fdp3){ /*Open file for appending */ if((*fdp1=open("file1-append", O_RDWR|O_CREAT|O_APPEND,S_IRUSR |S_IWUSR))==-1){ perror("File1 Open Error"); } /* open file and truncate */ if((*fdp2=open("file2-trunc", O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR))==-1){ perror("File2 Open Error"); } /* Open file only if it does not already exist */ if((*fdp3=open("file3-wronce", O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR))==-1){ perror("File3 Open Error"); } return 0; } int readfiles(int *fdp1, int *fdp2, int *fdp3){ printf("\nfdp1:%d,fdp2:%d,fdp3:%d\n",*fdp1,*fdp2,*fdp3); ssize_t readstatus; char mybuffer[BUFF_SIZE]; puts("File 1:"); readstatus = read(*fdp1,&mybuffer,BUFF_SIZE); printf("\nreadstatus:%d\n",readstatus); while(readstatus > 0){ puts(mybuffer); printf("\nreadstatus:%d\n",readstatus); readstatus = read(*fdp1,&mybuffer,BUFF_SIZE); } printf("\nreadstatus:%d\n",readstatus); if(readstatus ==-1){ perror("Error reading File 1:"); exit(1); } if((readstatus = read(*fdp2,&mybuffer,BUFF_SIZE))==-1){ perror("Error reading File 2:"); exit(1); } printf("\nreadstatus:%d\n",readstatus); puts("File 2:"); puts(mybuffer); if((readstatus = read(*fdp3,&mybuffer,BUFF_SIZE))==-1){ perror("Error reading File 3:"); puts("File probably already exists"); } puts("File 3:"); puts(mybuffer); return 0; }



1Likes
LinkBack URL
About LinkBacks


