更多详细内容请参考UNIX环境高级编程中文版
open
int open(const char *pathname,int flags)
int open(const char *pathname,int flags,mode_t mode)
打开或创建文件
sys/types.h
sys/sdat.h
fcntl.h
成功:文件描述符
失败:-1
pathname :要打开的文件名(含路径)
flags : 此函数多个选择项-O_RDONLY:只读方式 -O_WRONLY:只写方式 -O_RDWR:可读可写方式 也可再接下列一个或多个参数 O_APPEND:每次写时追加到文件的尾端 O_CREAT:若此文件不存在则创建它 O_EXCL:可测一个文件是否存在,不存在则创建,使得测试和创建两者为依哥原子操作 O_TRUNC:如果此文件存在,而且为读写或只写成功打开,则将长度截短为0 O_NOCTTY:如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端 O_NONBLOCK:如果pathname指的是一个FIFO,一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I/O操作设置为非阻塞方式 O_SYNC:使每次write都等到物理I/O操作完成>
mode : 一定实在flags中使用了O_CREAT标志,mode记录待创建文件的访问权限
mode的取值如下参考:SIRWXU:00700 拥有者读写执行权限 S_IRUSR: 00400 拥有者读权限 S_IWUSR:00200 拥有者写权限 S_IXUSR: 00100 拥有者执行权限 S_IRWXG:00070 组内成员读写执行权限 S_IRGRP: 00040 组内成员读权限 S_IWGRP:00020 组内成员写权限 S_IXGRP: 00010 组内成员执行权限 S_IRWXO:00007 其他成员读写执行权限 S_IROTH: 00004 其他成员读权限 S_IWOTH:00002 其他成员写权限 S_IXOTH: 00001 其他成员执行权限 也可以直接指定mode的值,如0777,0541等
#include
#include
#include
#include
int main()
{
int fd;
fd = open("./test.c",O_RDWR|O_CREAT,0660);
if(fd < 0)
{
printf("fail\n");
}
else
{
printf("OK!\n");
}
return 0;
}
creat
int creat(const char *pathname, mode_t mode);
创建新文件
sys/types.h
sys/stat.h
fcntl.h
成功: 文件描述符
失败: -1
pathname: 要创建的文件的文件名(含路径)
mode:创建文件的权限设置
#include
#include
#include
#include
int main()
{
int fd;
fd = creat("test.c",0660);
if(fd < 0)
{
printf("fail\n");
}
else
{
printf("OK!\n");
}
return 0;
}
close
int close(int fd);
关闭文件
unistd.h
成功: 0
失败:-1
fd:要关闭文件的文件描述符
read
ssize_t read(int fd, void *buf, size_t count);
从文件里面读取数据
unistd.h
成功: 读取的字节数
失败: -1
fd:要读取的文件的文件描述符
buf:读出的数据在内存中存放的位置首地址
count: 读取数据的最大字节数
#include
#include
#include
#include
int main()
{
int fd1,fd2;
char buf[12];
fd1 = open("test.c",O_RDONLY);
if (fd1 < 0)
{
printf("the file is open fail!");
}
fd2 = read(fd1,buf,12);
if (fd2 < 0)
{
printf("the file is creat fail!");
}
else
{
printf("the result is: %s",buf);
}
return 0;
}
write
ssize_t write(int fd, const void *buf, size_t count);
向文件里面写入数据
unistd.h
成功 : 写入的字节数
失败 : -1
fd:要写入的文件的文件描述符;
buf:要写入文件的数据在内存中存放位置的首地址;
count:写入的数据的最大字节数
#include
#include
#include
#include
int main()
{
int fd1,fd2;
char buf[12] = "Hello,Linux";
fd1 = open("test.c",O_WRONLY|O_CREAT,0660);
if (fd1 < 0)
{
printf("the file open fail!\n");
}
fd2 = write(fd1,buf,12);
if (fd2 < 0)
{
printf("the file write fail!\n");
}
else
{
printf("success!\n");
}
return 0;
}
lseek
off_t lseek(int fd, off_t offset, int whence);
重新定位文件的读写位置
sys/types.h
unistd.h
成功 : 返回移动后的文件指针距离文件头的位置
失败 : -1
fd:需要进行重新定位读写位置的文件的文件描述符
offset:位移量
whence:选项SEEK_SET, SEEK_CUR, or SEEK_END-SEEK_SET:设置位移量距离文件开始offset个字节 -SEEK_CUR:设置该文件位移量为当前值加offest(可正可负) -SEEK_END:设置该文件的位移量为文件长度加offset
#include
#include
#include
#include
int main()
{
int fd1,fd2,fd3;
char bufr[9];
char bufw[9]="123456789";
fd1 = open("test.c",O_RDWR);
if (fd1 < 0)
{
printf("the file is open fail!");
}
fd3 = write(fd1,bufw,7);
if(fd3 < 0)
{
printf("the file write fail!\n");
}
lseek(fd1,2,SEEK_SET);
fd2 = read(fd1,bufr,5);
if (fd2 < 0)
{
printf("the file is creat fail!");
}
else
{
printf("the result is: %s\n",bufr);
}
return 0;
}
dup
int dup(int oldfd);
复制一个文件描述符
unistd.h
成功 : 返回新的文件描述符
失败 : -1
oldfd:待复制的文件描述符
#include
#include
#include
#include
int main()
{
int fd,fd1,fd2,fd3;
char bufr[9];
char bufw[9]="123456789";
fd1 = open("test.c",O_RDWR);
if (fd1 < 0)
{
printf("the file is open fail!");
}
fd=dup(fd1);
fd3 = write(fd,bufw,7);
if(fd3 < 0)
{
printf("the file write fail!\n");
}
lseek(fd,2,SEEK_SET);
fd2 = read(fd,bufr,5);
if (fd2 < 0)
{
printf("the file is creat fail!");
}
else
{
printf("the result is: %s\n",bufr);
}
return 0;
}
更多详细内容请参考UNIX环境高级编程中文版