当遇见一个不懂的函数时该怎么学习呢
1:查看函数名。上网或者书上找相关资料 《unix环境高级编程》
例open()函数;
2:查看函数原型,在虚拟机中使用命令查看函数原型
redhat:man open
ubuntu: man 2 open
3:记录函数的一些参数,记录在《linux应用程序开发学习手册》
1函数名
open()
2函数原型
open(const char *pathname, int flags);
open(const char *pathname, int flags, mode_t mode);
3函数功能
open, creat - open and possibly create a file or device
Open,creat-用来打开和创建一个文件或设备
4所属头文件
#include
#include
#include
5返回值
成功:file descriptor 文件描述符
失败:-1
6参数说明
Pathname:要打开的文件名(含路径)
Flags(打开文件的标志,用一个或多个常量进行“或”运算构成)
-O APPEND:以追加的方式打开文件
-O_CREAT:当打开的文件不存在时创建该文件
Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的访问权限
4:写一个小程序进行函数的使用,熟练函数的参数运用
include
#include
#include
#include
void main()
{
int fd;
fd = open("/home/lesson3.c",O_RDWR|O_CREAT,0700);
if(fd<0)
printf("open file fail\n");
}
编译程序
gcc lesson3.c -o lesson3
运行程序
./lesson3
系统调用的函数:
打开函数 open()
创建函数 create()
关闭函数 close()
读函数 read()
写函数 write()
定位文件函数 lseek()
复制文件描述符函数 dup() dup2()
写一个有上面函数组合在一起的一个程序,实现简单的cp命令程序。cp.c
#include
#include
#include
#include
void main(int argc,char **argv) // argv[0] 存放的是命令的名字,cp
{
int fd_s;
int fd_t;
int count = 0;
char buf[512]; //开一个暂时存放读出数据的存放空间512个字节,栈的空间
/* 打开源文件*/
fd_s=open(argv[1],O_RDONLY); // 使用open函数,使用不需要创建新文件的,只有两个参数,
argv[1]有**argv参数传进来存放在数组的第一个参数 O_RDONLY以只读的方式打开源文件 然后由fd_s变量来保存一个文件描述符
/* 打开目标文件*/
fd_t=open(argv[2],O_RDWR|O_CREAT,0666); // 目标文件名存放在
argv[2]第二个参数中,打开方式
O_RDWR可读可写|
O_CREAT创建目标文件(目标文件不存在) 创建文件的权限0666
/* 读取源文件数据, 将读取出的源文件数据写入目标文件*/
while((count=read(fd_s,buf,512))>0) // read函数读数据,用while循环实现多次读数据。一个大的数据就会被拆分多个512字节数据被读取,
fd_s是源文件,在源文件中读数据,buf读取出来的数据存放在buf 中,开的buf为512个字节,读出的数据量为512个字节,读出所有数据后存放到count中。
write(fd_t,buf,count); //从
buf写出的数据存到
fd_t中,写出的数据量为
count中的数据。
/* 关闭文件*/
close(fd_s);
close(fd_t);
}
创建源文件s.txt
gcc -g cp.c -o cp
运行程序 ./cp s.txt ./t.txt
阅读(1183) | 评论(0) | 转发(0) |