linux程序设计编程题

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

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值