1、向文件f1中写入“hello world”,然后再将f1中在内容读出并在屏幕上。(注意必要的错误判断)
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
int fd;
char buf1[13]="hello world!";
char buf2[12];
int num;
fd=open("f1",O_RDWR|O_CREAT|O_TRUNC,0644);
if(fd==-1)
{
perror("f1 not open\n");
exit(1);
}
num=write(fd,buf1,sizeof(buf1)-1);
if(num!=(sizeof(buf1)-1))
printf("write less than want \n");
lseek(fd,0,SEEK_SET);
num=read(fd,buf2,12);
if(num!=12)
printf("read less than 12\n");
write(1,buf2,12);
close(fd);
return 0;
}
2、向文件f2中写入"aabbccddee",然后将偏移量移到绝对偏移量为4的位置处,读6个字符,并将结果显示在屏幕上。
#include<unistd.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/fcntl.h>
int main()
{
int fd;
char buf[11]="aabbccddee";
char buf2[10];
int num;
fd=open("f2",O_RDWR|O_TRUNC,0644);
if(fd==-1)
{
perror("f2 not open\n");
exit(1);
}
num=write(fd,buf,sizeof(buf)-1);
if(num!=(sizeof(buf)-1))
printf("write less than want\n");
lseek(fd,4,SEEK_SET);
num=read(fd,buf2,6);
if(num!=6)
printf("read less than 6 \n");
write(1,buf2,6);
close(fd);
return 0;
}
3、向文件f3中写入"aabbccddeeffgghh",然后将文件截短至8个字节,然后将截短后的文件内容读出并显示在屏幕上
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
#include<stdlib.h>
#include<sys/fcntl.h>
int main()
{
int fd;
char buf1[17]={"aabbccddeeffgghh"};
char buf2[8];
int num;
fd=open("f3",O_RDWR|O_CREAT|O_TRUNC,0644);
if(fd==-1)
{
perror("f3 not open");
exit(1);
}
num=write(fd,buf1,sizeof(buf1)-1);
if(num!=(sizeof(buf1)-1))
printf("write less than want \n");
lseek(fd,0,SEEK_SET);
ftruncate(fd,8);
num=read(fd,buf2,8);
if(num!=8)
printf("read less than 8\n");
write(1,buf2,8);
close(fd);
return 0;
}
4、在程序中将umask改至044,创建文件f4
#include<unistd.h>
#include<sys/stat.h>
#include<sys/fcntl.h>
int main()
{
int fd;
umask(044);
creat("f4",S_IRUSR|S_IWUSR);
return 0;
}
5、实现”cat 文件名"显示文件内容
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
int main(int argc,char *argv[])
{
int fd;
int num;
char buf[10];
if(argc!=2)
{
printf("miss filename\n");
exit(1);
}
fd=open(argv[1],O_RDONLY);
if(fd==-1)
{
perror("error open");
exit(1);
}
while((num=read(fd,buf,10))!=0)
write(1,buf,num);
close(fd);
return 0;
}
6、实现“cp 源文件 目标文件"功能
#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
#include<sys/stat.h>
int main(int argc,char *argv[])
{
int from,to;
int num;
char buf[10];
if(argc!=3)
{
printf("argument error\n");
exit(1);
}
from=open(argv[1],O_RDONLY);
to=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644);
num=read(from,buf,10);
while(num!=0)
{
write(to,buf,num);
num=read(from,buf,10);
}
close(from);
close(to);
return 0;
}
在linux中运行:
gcc test6.c -o test6
./test6 f4 /f4
cd /
ll