3.2
#include "apue.h"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int fd1=100;
int fd2=1000;
int mydup(const char* path)
{
if(fd1=open("/home/xc/mydup.c", O_CREAT|O_EXCL)==-1)
{
printf("已经存在\n");
close(fd2);
}
if(fd2!=fd1)
{
if(fd2!=1000)
close(fd2);
/*不知道文件描述符标志怎么清楚*/
fd2=dup(fd1);
}
return fd2;
}
int main(int argc ,char *argv[])
{
int fd3;
if(argc!=2)
err_quit("能不能长点心?输入个文件名会死?");
if(fd3=mydup(argv[1])==-1)
err_quit("cuole\n");
printf("fd1=%d,fd2=%d\n",fd1,fd2);
}
运行结果
3.6是参考的别人的,感觉写的比较完善
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#define BUFFSIZE 4096
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Please enter the file name!/n");
exit(1);
}
int fd;
if ((fd = open(argv[1],O_RDWR | O_APPEND))== -1)
{
printf("%s",strerror(errno));
exit(2);
}
off_t offset = 10;
if (lseek(fd,offset,SEEK_CUR) == -1)
{
printf("cannot seek./n");
}
else
{
printf("seek OK!");
}
int n;
char buf[BUFFSIZE];
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
{
if (write(fd, buf, n) != n)
{
printf("write error!/n");
exit(3);
}
}
if (n < 0)
{
printf("read error!/n");
exit(4);
}
exit(0);
}