Код:
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main() {
int fd;
ssize_t rwcount;
off_t fdseek;
char rbuff[10];
if ((fd=creat("newfile",0600))==-1) {
perror("create error");
return 1;
}
if ((rwcount=write(fd,"unix",4))==-1) {
perror("write error");
return 1;
}
close(fd);
if ((fd=open("newfile",O_RDONLY))==-1) {
perror("open error");
return 1;
}
if ((fdseek=lseek(fd,-1,SEEK_END))==-1) {
perror("lseek error");
return 1;
}
fprintf(stderr,"offset = %d \n",fdseek);
if ((rwcount=read(fd,rbuff,1))==-1) {
perror("read error");
return 1;
}
fprintf(stderr,"read count = %d \n",rwcount);
if (rwcount>0) {
fprintf(stderr,"read buffer = ");
write(2,rbuff,rwcount);
fprintf(stderr,"\n");
}
return 0;
}
Под линуксом выводит следующие:
Код: Выделить всё
offset = 3
read count = 1
read buffer = x
Под MacOS read возвращал 0 (сейчас проверить не на чем).
Теперь про mv
в линуксе вот такое перемещение файла срабатывает
linux
$ mkdir d1 d2
$ touch d1/f1
$ chmod 0000 d1/f1
$ chmod 0300 d1 d2
$ mv d1/f1 d2
а в MacOS наблюдалось ужасное: файл из d1 пропадал, а в d2 не появлялся.
Хотя вот так все работало:
MacOS
$ mkdir d1 d2
$ touch d1/f1
$ chmod 0000 d1/f1
$ chmod 0300 d1 d2
$ ln d1/f1 d2
$ rm d1/f1
И еще не получилось создать разреженный файл (файл с дырой).