上周学习了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;
}