LinuxでキャッシュなしI/O操作(復習)


先周Linuxの下のファイルの操作を学んで、今日知識点についてまた整理しました.ファイル操作では、キャッシュを持たないI/O操作とキャッシュ付きI/O操作に分けられます.このブログにはキャッシュされていないI/O操作のサンプルコードが貼られています.
/*     I/O  */
/*  creat.c  */

#include 
#include 
#include 
#include 
#include 

int main()
{
	int fd;

	fd = creat("hello.txt",O_CREAT);   //        hello.txt
	if(fd < 0)     //    
	{
		perror("creat");
		exit(1);
	}
	else
	{
		printf("Creat hello.txt success!
"); } close(fd); return 0; } /* open.c */ #include #include #include #include #include int main() { int fd; // fd = open("hello.txt",O_RDWR | O_CREAT,0666); if(-1 == fd) { perror("open"); exit(1); } else { printf("Open the hello.txt success!
"); } close(fd); return 0; } /* read.c */ #include #include #include #include #include #include #include int main() { int fd,ret; char buf[3] = {0}; fd = open("hello.txt",O_RDONLY); if(-1 == fd) { perror("open"); exit(1); } printf("Read form the txt:
"); while(read(fd,buf,sizeof(buf)-1)) // , { printf("%s",buf); memset(buf,0,sizeof(buf)); // } close(fd); return 0; } /* write.c */ #include #include #include #include #include #include #include int main() { int fd; int ret; char buf[20] = {0}; fd = open("hello.txt",O_WRONLY | O_CREAT,0666); if(-1 == fd) { perror("open"); exit(1); } while(1) // { printf("Please input the string:
"); scanf("%s",buf); ret = write(fd,buf,strlen(buf)); if(-1 == ret) { perror("write"); exit(2); } memset(buf,0,sizeof(buf)); // } close(fd); return 0; } /* copy.c */ #include "Filehead.h" /* */ int main(int argc,char **argv) { int fd1,fd2; char buf[64] = {0}; int ret; /* */ if(argc < 3) { printf("Input Error!
"); printf("Usage:./xxx xxx xxx
"); exit(1); } /* */ fd1 = open(argv[1],O_RDONLY); // if(-1 == fd1) { perror("open1"); exit(2); } fd2 = open(argv[2],O_WRONLY | O_CREAT,0777); // if(-1 == fd2) { perror("open2"); exit(3); } /* */ while((ret = read(fd1,buf,sizeof(buf))) != 0) // sizeof(buf) , { ret = write(fd2,buf,ret); if(-1 == ret) { perror("write"); exit(4); } memset(buf,0,sizeof(buf)); // } /* */ close(fd1); close(fd2); return 0; }