open.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
int main1()
{
// 第一个参数:要打开的文件名
// 第二个参数:打开方式
int fd = open("man1.txt", O_RDONLY);
if (-1 == fd)
{
printf ("打开文件失败\n");
printf ("errno : %d\n", errno);
perror ("打开man1.txt文件失败"); // 打印错误信息,参数是自己的相关提示
return -1;
}
printf ("成功\n");
// 关闭文件,参数是文件描述符
close(fd);
return 0;
}
// 文件描述符:打开文件的时候返回的文件描述符默认使用当前可用的最小的文件描述符
int main()
{
close(1);
// 文件不存在,创建一个文件, 文件的权限由第三个参数决定,最终的权限:mode & (~umask)
int fd = open("abc", O_WRONLY | O_CREAT, 0777);
if (-1 == fd)
{
printf ("打开文件失败\n");
printf ("errno : %d\n", errno);
perror ("打开man1.txt文件失败"); // 打印错误信息,参数是自己的相关提示
return -1;
}
printf ("成功, fd = %d\n", fd);
fflush(stdout);
close(fd);
return 0;
}
read.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define SIZE 1024
int main1()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[10];
ssize_t ret = read(fd, buf, 10);
if (-1 == ret)
{
perror("读失败");
return -1;
}
printf ("读到的字节数:%ld, 读到的内容:%s\n", ret, buf);
close(fd);
return 0;
}
int main2()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[SIZE+1];
int count = 0;
int ret = 0;
while ((ret = read(fd, buf, SIZE)) != 0)
{
if (-1 == ret)
{
perror("读失败");
return -1;
}
count++;
buf[ret] = '\0';
printf ("%s", buf);
}
printf ("文件读结束, 读了 %d 次\n", count);
close(fd);
return 0;
}
// 读一个完整的大数据
int main()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[SIZE+1];
char *p = buf;
int count = SIZE;
while (count)
{
int ret = read(fd, p, count);
if (-1 == ret)
{
perror("读取数据失败");
return -1;
}
printf ("ret = %d\n", ret);
count -= ret;
p += ret;
}
buf[SIZE] = 0;
printf ("%s",buf);
close(fd);
return 0;
}
write.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define SIZE 1024
int main1()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[10];
ssize_t ret = read(fd, buf, 10);
if (-1 == ret)
{
perror("读失败");
return -1;
}
printf ("读到的字节数:%ld, 读到的内容:%s\n", ret, buf);
close(fd);
return 0;
}
int main2()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[SIZE+1];
int count = 0;
int ret = 0;
while ((ret = read(fd, buf, SIZE)) != 0)
{
if (-1 == ret)
{
perror("读失败");
return -1;
}
count++;
buf[ret] = '\0';
printf ("%s", buf);
}
printf ("文件读结束, 读了 %d 次\n", count);
close(fd);
return 0;
}
// 读一个完整的大数据
int main()
{
int fd = open("test.c", O_RDONLY);
if (-1 == fd)
{
perror("打开test.c文件失败");
return -1;
}
char buf[SIZE+1];
char *p = buf;
int count = SIZE;
while (count)
{
int ret = read(fd, p, count);
if (-1 == ret)
{
perror("读取数据失败");
return -1;
}
printf ("ret = %d\n", ret);
count -= ret;
p += ret;
}
buf[SIZE] = 0;
printf ("%s",buf);
close(fd);
return 0;
}
lseek.c
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define SIZE 1024*1024*40
int main1()
{
int fd = open("1.ppt", O_RDONLY);
if (-1 == fd)
{
perror("打开tmp.txt文件失败");
return -1;
}
// 获取文件大小
off_t ret = lseek(fd, 0, SEEK_END);
printf ("文件大小:%ld\n", ret);
close(fd);
return 0;
}
int main2()
{
int fd = open("tmp.txt", O_WRONLY|O_CREAT |O_TRUNC, 0766);
if (-1 == fd)
{
perror("打开tmp.txt文件失败");
return -1;
}
write(fd, "hello", 5);
off_t ret = lseek(fd, 3, SEEK_SET);
write(fd, "world", 5);
close(fd);
return 0;
}
// 创建大文件
int main3()
{
int fd = open("big", O_WRONLY|O_CREAT, 0766);
if (-1 == fd)
{
perror("打开tmp.txt文件失败");
return -1;
}
off_t ret = lseek(fd, SIZE-1, SEEK_SET);
write(fd, "a", 1);
printf ("ret:%ld\n", ret);
close(fd);
return 0;
}
// 创建大文件
int main()
{
truncate("aa.txt", SIZE);
return 0;
}
dup.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main1()
{
int fd = open("test", O_WRONLY|O_CREAT, 0766);
if (-1 == fd)
{
perror("打开tmp.txt文件失败");
return -1;
}
int newfd = open("test", O_WRONLY|O_CREAT, 0766);
if (-1 == newfd)
{
perror("打开tmp.txt文件失败");
return -1;
}
// int newfd = dup(fd);
printf ("fd = %d\n", fd);
printf ("newfd = %d\n", newfd);
write(fd, "hello", 5);
write(newfd, "world", 5);
close(fd);
return 0;
}
int main()
{
int fd = open("test", O_WRONLY|O_CREAT, 0766);
if (-1 == fd)
{
perror("打开tmp.txt文件失败");
return -1;
}
int newfd = open("test1", O_WRONLY|O_CREAT, 0766);
if (-1 == newfd)
{
perror("打开tmp.txt文件失败");
return -1;
}
// 将文件描述符表中指针部分 复制一份给 newfd
// 如果复制成功,则会将 原来 newfd 打开的文件关闭
dup2(fd, newfd);
printf ("fd = %d\n", fd);
printf ("newfd = %d\n", newfd);
write(fd, "hello", 5);
write(newfd, "world", 5);
close(fd);
return 0;
}