Linux下不带缓存的I/O操作(复习)

    上周学习了Linux下的文件操作,今天就着知识点又整理了一下。文件操作下,又分不带缓存的I/O操作和带缓存的I/O操作。这篇博客贴不带缓存的I/O操作的示例代码。


/*不带缓存的I/O操作*/
/*  creat.c  */

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

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!\n");
	}

	close(fd);

	return 0;
}




/*  open.c   */

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>


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!\n");
	}

	close(fd);

	return 0;
}





/*  read.c  */

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

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:\n");
	while(read(fd,buf,sizeof(buf)-1))  //一直读到文件末尾,每次读两个字节
	{
		printf("%s",buf);
		memset(buf,0,sizeof(buf));  //刷新缓存区
	}

	close(fd);

	return 0;
}







/*  write.c  */

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>

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:\n");
		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!\n");
		printf("Usage:./xxx xxx  xxx\n");
		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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值