系统编程所需的头文件:
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
一些练习:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
char read_buf[6];
char write_buf[6] = "hello";
int i;
int bytes_read;
int bytes_write;
int fd;
fd = open("hello.txt",O_RDWR | O_CREAT,0644);
if(fd == -1)
{
perror("open error!");
exit(-1);
}
for(i = 0;i < 3;i++)
{
bytes_write = write(fd,write_buf,5);
if(bytes_write == -1)
{
perror("write error!");
close(fd);
exit(-1);
}
else
{
write(fd,"\n",1);
}
}
lseek(fd,0,SEEK_SET);
for(i = 0;i < 3;i++)
{
bytes_read = read(fd,read_buf,6);
if(bytes_read == -1)
{
perror("read error!");
close(fd);
exit(-1);
}
else
{
write(1,read_buf,6);
}
}
close(fd);
return 0;
}
拷贝文件
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#define BUFFER_SIZE 1024
int main(int argc,char **argv)
{
int from_fd,to_fd;
int bytes_read;
int bytes_write;
char buf[BUFFER_SIZE];
char *ptr;
if(argc != 3) //如果没有三个量
{
fprintf(stderr,"usage: %s need from and to file!\n",argv[0]);
exit(0);
}
if((from_fd = open(argv[1],O_RDONLY)) == -1) //判断第一个文件(打开只读)
{
fprintf(stderr,"open %s error: %s\n",argv[1],strerror(errno));
exit(-1);
}
if((to_fd = open(argv[2],O_WRONLY | O_CREAT,0644)) == -1) //判断第二个文件(打开写入)
{
fprintf(stderr,"open %s error: %s\n",argv[2],strerror(errno));
exit(-1);
}
while(bytes_read = read(from_fd,buf,BUFFER_SIZE)) //当其不等于0(未读到最后)
{
if(bytes_read == -1) //只读错误退出
{
break;
}
else
{
ptr = buf;
while(bytes_write = write(to_fd,ptr,bytes_read)) //未写到最后
{
if(bytes_write == -1) //写入错误退出
{
break;
}
else if(bytes_write == bytes_read)
{
break;
}
else if(bytes_write > 0)
{
bytes_read -= bytes_write;
ptr += bytes_write;
}
}
if(bytes_write == -1)
{
break;
}
}
}
close(from_fd);
close(to_fd);
return 0;
}