Linux打印程序的全部fd,Linux文件操作(示例代码)

在实际开发的过程中,时常会用到文件,比如打印的log,记录数据的文本,程序调试的debug信息等,所以linux下文件操作是作为一个linux开发者必备的技能之一。

1.创建

任何事物都需要经历一个从无到有的过程,linux下的文件有不例外,linux下创建文件有很多种方式,下面就来一一列举

(1).在shell中用命令创建

比如:touch hello.txt  //创建一个名为hello.txt的空白文件

(2).在程序中使用代码创建

a. int creat(const char *filename, mode_t mode)   //filename需要指定具体的路径,mode指定的是文件的权限

如果需要查看详细的说明,可以在linux中使用命令man creat

例如: create("./hello.txt", S_IXUSR);    //在当前路径下创建hello.txt的文件,并且用户对该文件具有读/写/执行权限

函数返回文件描述符,如果返回-1则表示错误发生

20180110235544255152.png

b.int open(const char *pathname, int flag, mode_t mode)

flag需要设置为O_CREAT,表示如果文件不存在则创建文件,mode和creat函数中的mode是相同的,表示的是文件的权限属性;需要注意的是,如果添加了O_CREAT参数,如果文件已经存在,函数会返回错误

2.打开文件

int open(const char *pathname, int flags);    //操作已经存在的文件

int open(const char *pathname, int flags, mode_t mode);   //操作未存在的文件,mode主要是对文件权限进行设置

在linux中man open 的时候可能查不到open函数的介绍,因为这是man手册把它和creat放在一起了,直接man creat就行了,如下图所示,上面是使用这个函数需要添加的头文件

20180110235544264918.png

open函数会返回一个文件描述符,在程序中调用read/write的时候需要用到这个文件描述符,其实就是告诉了程序一种找到文件的方式

20180110235544276637.png

3.关闭文件

关闭文件很简单,直接调用close()函数就行了,参数是open函数返回的文件描述符

4.读取文件内容

int read(int fd, const void *buf, size_t length);   //从当前光标开始的位置读取数据,如果不设置光标位置,那么就是默认从头开始读length个字节

5.向文件写信息

int write(int fd, const void *buf, size_t length);  //从光标开始的位置写数据,默认是从头开始写

6.调整文件光标的位置

int lseek(int fd, offset_t offset, int whence);

lseek函数可以将光标相对当前位置就行位移,whence参数可以指定当前位置(SEEK_SET: 文件开头  SEEK_CUR:文件当前光标位置  SEEK_END:文件末尾),不同的参数对offset有不同的使用

OFFSET_SET:

The offset is set to offset bytes.   //相对于文件头的偏移

OFFSET_CUR:

The offset is set to it‘s current location plus offset.   //相对当前位置的偏移,负数为往前,正数为往后

OFFSET_END:

The offset is set to the size of the file plus offset bytes.   //文件大小加上offset数值

函数执行成功返回相对文件头的偏移,失败则返回-1,见man手册

20180110235544289333.png

下面是一个简单的小例子:

jia.gif

jian.gif

1 #include

2 #include

3 #include

4 #include

5 #include

6

7 #define LENGTH 100

8

9 intmain()10 {11 intfd, len;12 charstr[LENGTH];13 char *tmp = "hello world";14

15 fd = open("./hello.txt", O_CREAT | O_RDWR | S_IRUSR |S_IWUSR, S_IRWXG);16 if (fd < 0)17 {18 printf("Open failed. \n");19 return -1;20 }21 else

22 {23 write(fd, tmp, strlen(tmp));24 }25 lseek(fd, SEEK_SET, sizeof(tmp));26 write(fd, tmp, strlen(tmp));27 close(fd);28 return 0;29 }

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值