Linux学习随手笔记-文件操作

一、相关命令
1、cd xxx
cd . 当前文件
cd … 回到父文件目录
cd / 去到根目录
cd ~去个人工作目录
2、ls xxx
ls 显示目录下的文件
ls -a 显示目录下的所有文件,包括隐藏文件
ls -l xxx 显示文件的相关信息
3、cat xxx 显示这个文件的内容
4、pwd 显示当前路径
5、mkdir xxx 创建文件夹
6、rm
rm xxx 删除这个文件
rm -rf xxx删除这个文件夹
rm -rf xxx/ 删除这个目录以及目录下文件
7、cp 源文件路径 目标文件路径 复制文件
8、mv 源文件 目标路径(必须是绝对路径)移动文件
9、chmod 权限 文件名 设置文件权限,权限如函数open设置权限
二、相关函数
1、int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
函数说明
pathname参数为路径,
flags参数为以下:
O_RDONLY以只读方式打开
O_WRONLY以只写方式打开
O_RDWR以可读可写方式打开
O_APPEND从文件尾部开始
O_ASYNC以同步的方式打开文件
O_CREAT若打开的文件不存在,则创建这个文件
O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。
O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。
O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。
O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。
O_EXCL 如果O_CREAT也被设置,此指令会去检查文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。
mode参数如下:
创建的文件可以添加以下权限
如 0777
7可分解为,1可执行,2可写,4可读
最高位的7表示拥有者(及用户)对这个文件的权限为可写可读可 执行。
第二个7表示组的权限,同上,
第三个7表示其他人的权限,同上。
函数返回值:
如文件打开或创建成功返回一个文件描述符(大于0),若失败返回-1
2、ssize_t write(int fd, const void *buf, size_t count);
fd参数为文件描述符
buf为欲写入的内容
count为写入内容的大小
函数返回值:
若写入成功返回实际写入的大小,失败返回-1
3、ssize_t read(int fd, void *buf, size_t count);
fd参数为文件描述符
buf读出数据的缓冲区
count读出数据的大小
函数返回值:
若读出成功返回实际读出的大小,失败返回-1
注:此函数在socket中会阻塞。
4、off_t lseek(int fd, off_t offset, int whence);
fd参数为文件描述符
offset偏移的大小,为正时向文件头方向偏移,为负时向文件尾偏移
whence参数如下
SEEK_SET在文件头设置偏移
SEEK_C文件偏移量设置为其当前位置加上偏移字节
SEEK_END在文件尾设置偏移
函数返回值:
返回从文件头开始的偏移量
5、int close(int fd);
关闭文件
函数返回值
0成功,-1失败
6、int chdir(const char *path);
改变函数工作目录,只针对该进程,且运行完后回到之前目录
参数path:
欲改变到的工作目录
函数返回值:
成功返回0,失败返回-1
7、int access(const char *pathname, int mode);
参数pathname:
路径+文件名
参数mode如下
F_OK判断这个文件是否存在
R_OK判断这个文件是否有读权限
W_OK判断这个文件是否有写权限
X_OK判断这个文件是否有执行权限
函数返回值:
以上条件为是则返回0,否则返回-1
三、一段小程序

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

struct file_message
{
        int fd;
        char buf[1024];
        int len;
        char *write_p;
};

int main()
{
        struct file_message file_m;
        file_m.fd = open("game-data",O_RDWR);
        if(file_m.fd < 0)
        {
                printf("open file failed\n");
                exit(-1);
        }
        else
        {
                file_m.len = read(file_m.fd, file_m.buf, sizeof(file_m.buf));
                file_m.write_p = strstr(file_m.buf, "speed=");
                file_m.write_p = file_m.write_p + 6;
			    *file_m.write_p = '5';
                *(++file_m.write_p) = '0';
                lseek(file_m.fd,0 ,SEEK_SET);
                write(file_m.fd, file_m.buf, file_m.len);
        }
        close(file_m.fd);
        return 0;
}

该函数功能为将game-data这个文件里面的speed参数修改
修改前如下在这里插入图片描述运行程序后
在这里插入图片描述
第一次写博客,记录自己的学习过程,希望大家多多指出我的错误,共同进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值