Linux(基础IO、文件权限、Makefile)

这篇具有很好参考价值的文章主要介绍了Linux(基础IO、文件权限、Makefile)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、man 手册

1.1 汉化

1.2 具体使用

2、文件权限

2.1 权限理解

2.2 文件详细信息查询

2.3 权限更改

3、常用函数接口

3.1 open

3.2 read

3.3 write

3.4 close

3.5 函数使用示例

4、make与Makefile

4.1 make 与 Makefile区别

4.2 Makefile的编写

5、vim简单操作


1、man 手册

1.1 汉化

安装中文包

sudo apt-get update
sudo apt-get install manpages-zh

1.2 具体使用

使用三种方式查询open接口的详细信息

//man -L zh_CN open
man 1 open
man 2 open
man 3 open

2、文件权限

2.1 权限理解

在 Ubuntu(以及其他类 UNIX 操作系统)中,文件权限用于控制谁可以对文件进行哪些操作。文件权限在权限位组合中表示为一组三位权限字符串。每个权限字符串表示了文件的所有者、组和其他用户所具有的权限。 Ubuntu 文件权限的详细说明:

一个权限字符串由九个字符组成,这九个字符可以分成三组,每组三个字符:

  • 第一组:文件类型和所有者权限
  • 第二组:组权限
  • 第三组:其他用户权限

每组中的三个字符分别表示读取(r)、写入(w)和执行(x)权限。如果某个权限位被授予,相应的字符为相应的字母,如果未授予,则为减号(-)。

以下是一个权限字符串的示例:-rwxr--r--

这个权限字符串表示:

  • 文件类型:普通文件(减号表示)
  • 所有者权限:读、写、执行
  • 组权限:读
  • 其他用户权限:读

2.2 文件详细信息查询

可以用 ll 命令查看当前文件夹下文件详细信息

Linux(基础IO、文件权限、Makefile),Linux学习笔记,linux,ubuntu

 或者查看指定文件

zsd@Ubuntu:~/study/linuxStudy$  ls -l test.c
-rw-rw-r-- 1 zsd zsd 0  8月 27 15:34 test.c

在上面的输出中,-rw-r--r-- 就是文件的权限字符串。第一个字符 - 表示文件类型(普通文件),d 表示隐藏文件,接下来的三个字符是所有者权限,再后面的三个字符是组权限,最后的三个字符是其他用户权限。

2.3 权限更改

要更改文件权限,可以使用 chmod 命令。例如,要将文件 "test.c" 的所有者权限设置为读、写、执行,可以执行以下命令:

chmod 700 test.c

这会将权限字符串修改为 -rwx------,表示所有者拥有全部权限,其他用户没有任何权限。

Linux(基础IO、文件权限、Makefile),Linux学习笔记,linux,ubuntu

Linux(基础IO、文件权限、Makefile),Linux学习笔记,linux,ubuntu

3、常用函数接口

3.1 open

open 函数是一个系统调用,用于打开一个文件或者创建一个新文件,并返回一个文件描述符(file descriptor),以便后续对文件的读写操作。它是在 <fcntl.h> 头文件中声明的,其函数原型如下:

#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);

① open 函数的参数和作用:

  • pathname(文件路径):这是一个字符串,表示要打开或创建的文件的路径。可以是相对路径或绝对路径。

  • flags(标志位):这是一个整数,用于指定打开文件的方式和选项。常见的标志位包括:

    • O_RDONLY:只读打开。
    • O_WRONLY:只写打开。
    • O_RDWR:读写打开。
    • O_CREAT:如果文件不存在,创建文件。
    • O_TRUNC:如果文件存在,截断文件(将文件大小置为0)。
    • O_APPEND:在文件末尾追加写入。

    这些标志位可以通过按位或(|)组合使用,以满足特定的需求。例如,O_RDONLY | O_CREAT 表示以只读方式打开文件,如果文件不存在则创建。

  • mode(文件权限):这是一个整数,仅在创建文件时使用。它指定了新创建文件的权限(文件所有者、组和其他用户的读写执行权限)。通常使用八进制表示,如 0644 表示所有者可读写,其他用户只读。

②函数返回值:

open 函数的返回值是一个整数,表示文件描述符。如果成功打开或创建文件,返回的文件描述符是一个非负整数。如果出现错误,返回值为 -1,并可以使用 errno 来获取具体的错误代码。

3.2 read

read 函数是一个系统调用,用于从文件描述符(file descriptor)中读取数据。它是在 <unistd.h> 头文件中声明的,其函数原型如下:

#include <unistd.h> 
ssize_t read(int fd, void *buf, size_t count);

①read 函数的参数和作用:

  • fd(文件描述符):这是一个整数值,表示要从哪个文件描述符读取数据。文件描述符是一个用于标识打开的文件、套接字等的整数值。在代码中,使用了 open 函数来打开文件,并将返回的文件描述符传递给了 read 函数。

  • buf(缓冲区):这是一个指向存储读取数据的内存缓冲区的指针。read 函数会将读取的数据存储到这个缓冲区中。

  • count(读取字节数):这是要读取的最大字节数。read 函数会尝试从文件中读取最多 count 字节的数据。

②函数返回值:

read 函数的返回值是一个 ssize_t 类型的整数,表示实际读取的字节数。返回值可以是以下几种情况之一:

  • 如果返回值为正数:表示成功读取了指定数量的字节。
  • 如果返回值为 0:表示已经到达文件末尾(End of File,EOF)。
  • 如果返回值为 -1:表示出现了错误。可以通过检查 errno 来获取具体的错误代码。

3.3 write

write 函数是一个系统调用,用于向文件描述符(file descriptor)写入数据。它是在 <unistd.h> 头文件中声明的,其函数原型如下:

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

①write 函数的参数和作用:

  • fd(文件描述符):这是一个整数值,表示要向哪个文件描述符写入数据。文件描述符是一个用于标识打开的文件、套接字等的整数值。在代码中,你使用了 open 函数来打开文件,并将返回的文件描述符传递给了 write 函数。

  • buf(缓冲区):这是一个指向包含要写入数据的内存缓冲区的指针。write 函数会将缓冲区中的数据写入到文件中。

  • count(写入字节数):这是要写入的字节数。write 函数会尝试将缓冲区中的前 count 字节的数据写入到文件中。

②函数返回值:

write 函数的返回值是一个 ssize_t 类型的整数,表示实际写入的字节数。返回值可以是以下几种情况之一:

  • 如果返回值为非负数:表示成功写入了指定数量的字节。
  • 如果返回值为 -1:表示出现了错误。可以通过检查 errno 来获取具体的错误代码。

3.4 close

close 函数是一个系统调用,用于关闭文件描述符(file descriptor)。它是在 <unistd.h> 头文件中声明的,其函数原型如下: 

#include <unistd.h>
int close(int fd);

①close 函数的解析:

  • fd(文件描述符):这是一个整数值,表示要关闭的文件描述符。文件描述符是一个用于标识打开的文件、套接字等的整数值。在代码中,你可能使用了 open 函数来打开文件,并将返回的文件描述符传递给了 close 函数。

②函数返回值:

close 函数的返回值是一个整数。如果关闭文件成功,返回值为 0。如果出现错误,返回值为 -1,并可以通过检查 errno 来获取具体的错误代码。

3.5 函数使用示例

#include <fcntl.h>   // 包含文件操作相关的头文件
#include <unistd.h>  // 包含系统调用相关的头文件
#include <stdio.h>   // 包含标准输入输出库,用于使用 perror 函数

int main() {
    // 打开源文件,只读方式
    int src_fd = open("source.txt", O_RDONLY);
    if (src_fd == -1) {
        perror("Error opening source file");
        return 1;
    }

    // 打开目标文件,写入方式(如果不存在则创建)
    int dest_fd = open("destination.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (dest_fd == -1) {
        perror("Error opening destination file");
        close(src_fd);  // 关闭源文件
        return 1;
    }

    // 读取源文件数据并写入目标文件
    char buffer[1024];
    ssize_t bytes_read;

    while ((bytes_read = read(src_fd, buffer, sizeof(buffer))) > 0) {
        ssize_t bytes_written = write(dest_fd, buffer, bytes_read);
        if (bytes_written == -1) {
            perror("Error writing to destination file");
            close(src_fd);   // 关闭源文件
            close(dest_fd);  // 关闭目标文件
            return 1;
        }
    }

    // 检查读取过程中是否出错
    if (bytes_read == -1) {
        perror("Error reading from source file");
        close(src_fd);   // 关闭源文件
        close(dest_fd);  // 关闭目标文件
        return 1;
    }

    // 关闭文件
    if (close(src_fd) == -1) {
        perror("Error closing source file");
        return 1;
    }

    if (close(dest_fd) == -1) {
        perror("Error closing destination file");
        return 1;
    }

    printf("File copy successful.\n");

    return 0;
}

4、make与Makefile

4.1 make 与 Makefile区别

make make 是一个命令行工具,用于自动化构建软件项目。它根据一组规则和依赖关系,检查源代码文件的最新修改日期,并确定哪些文件需要重新编译。make 在 Linux 和类 UNIX 系统上广泛使用,以减少手动编译的工作量。

Makefile Makefile 是一个文本文件,其中包含了用于构建软件项目的规则、依赖关系和命令。它告诉 make 工具如何编译和链接源代码文件,以及在构建过程中需要执行哪些操作。Makefile 通常包括目标(target)、依赖关系(dependencies)和要执行的命令。

4.2 Makefile的编写

# 编译器
# CC = g++
CC = gcc

# 编译选项
# CFLAGS = -Wall -std=c++11
# CFLAGS = -Wall -std=c++11 -g
# CFLAGS = -Wall -std=c++11 -static
CFLAGS = -Wall

# 目标文件名
TARGET = myprogram

# 所有的源代码文件
SOURCES = main.c utils.c mytest.c

# 生成目标文件的中间文件
OBJECTS = $(SOURCES:.c=.o)

# 默认目标
all: $(TARGET)

# 生成目标文件
$(TARGET): $(OBJECTS)
	$(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS)

# 编译每个源文件到目标文件
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# 调试目标
# debug: $(TARGET)
	# gdb ./$(TARGET)

# 清理生成的文件
clean:
	rm -f $(OBJECTS) $(TARGET)

5、vim简单操作

输入:help查看帮助,按下Ctrl + w 然后按下 q 退出帮助

  1. 启动 Vim: 在终端中输入 vim 命令,后跟文件名,即可启动 Vim 并打开指定文件:

  2. 模态编辑: Vim 有多种模式,其中两个主要模式是:

    • 正常模式(Normal Mode):用于导航、删除、复制等操作。
    • 插入模式(Insert Mode):用于输入文本。
  3. 切换模式

    • 进入正常模式:按下 Esc 键。
    • 进入插入模式:在正常模式下按下 i 键(在光标前插入)、a 键(在光标后插入)或其他命令(如 oO)。
  4. 保存和退出

    • 保存文件:在正常模式下按下 : 键,然后输入 w 并按下 Enter 键。
    • 保存并退出:在正常模式下按下 : 键,然后输入 wq 并按下 Enter 键。
    • 退出不保存:在正常模式下按下 : 键,然后输入 q! 并按下 Enter 键。
  5. 基本移动

    • 上移:k
    • 下移:j
    • 左移:h
    • 右移:l
  6. 删除和复制

    • 删除字符:在正常模式下按下 x 键。
    • 复制行:在正常模式下按下 yy
  7. 撤销和重做

    • 撤销:在正常模式下按下 u 键。
    • 重做:在正常模式下按下 Ctrl + r 键。
  8. 查找和替换文章来源地址https://www.toymoban.com/news/detail-677749.html

    • 查找:在正常模式下按下 / 键,然后输入要查找的内容并按下 Enter 键。
    • 替换:在正常模式下按下 : 键,然后输入 %s/old/new/g 进行全局替换。

到了这里,关于Linux(基础IO、文件权限、Makefile)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 基础IO(2)磁盘文件

    扇区:整个盘片分成不同的区块,每一个区块就是一个扇区。 扇区是磁盘IO的基本单位,一般为 512Byte 或 4KB , 一般磁盘都是512Byte 磁道:同一半径一圈区域是磁道 磁盘读写依靠的是磁头,盘面高速旋转,磁头来回摆动。 首先,确定在那个盘面,也就是 磁头 head , 其次,磁头

    2024年04月28日
    浏览(36)
  • 【Linux】基础IO_文件系统

     环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【 Linux 】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【C/进阶】如何对文件进行读写(含二进制)操作? 【Linux】基础IO_文件操作 【Linux】基础IO_文件描述符与重定向 在前文我们所讲的都是

    2024年02月05日
    浏览(42)
  • 【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向

    作者:დ旧言~ 座右铭:松树千年终是朽,槿花一日自为荣。 目标:了解在Linux下的系统文件IO,知道什么是文件描述符,什么是重定向 毒鸡汤:白日莫闲过,青春不再来。 专栏选自:Linux初阶 望小伙伴们点赞👍收藏✨加关注哟💕💕 最早我们在C语言中学习关于如何用代码

    2024年04月14日
    浏览(54)
  • 【Linux】基础IO——系统文件IO&&fd&&重定向

    大家好我是沐曦希💕 空文件,也要在磁盘占据空间,因为文件也有属性,属性也属于数据,需要空间进行存储。所以 文件包括内容和属性 所以 对文件操作就是对内容或者对属性进行操作,或者对内容和属性进行操作。 文件具有唯一性,所以在 标定一个文件时候,必须使用

    2024年02月02日
    浏览(46)
  • 【Linux】基础 IO(文件描述符)-- 详解

    1、 文件的宏观理解 文件在哪呢? 从广义上理解,键盘、显示器、网卡、声卡、显卡、磁盘等几乎所有的外设都可以称之为文件,因为 “Linux 下,一切皆文件”。 从狭义上的理解, 文件在 磁盘(硬件) 上放着 ,只有操作系统才能真正的去访问磁盘。磁盘是一种永久存储介

    2024年03月24日
    浏览(49)
  • Linux之基础IO文件系统讲解

    在C语言中,读文件和写文件是常见的操作,用于从磁盘读取数据到内存或将数据从内存写入磁盘文件中。这些操作需要使用标准库中的文件I/O函数。下面我将详细解释如何在C语言中进行读文件和写文件操作,并举例说明。 在C语言中,读取文件的过程涉及以下步骤: 打开文

    2024年02月11日
    浏览(40)
  • Linux基础IO【文件理解与操作】

    ✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Great minds discuss ideas. Average minds discuss events. Small minds discuss people. 大智论道,中智论事,小智论人。 文件操作是 基础IO 学习的第一步,我们在 C语言 进阶中,就

    2024年02月02日
    浏览(44)
  • Linux笔记:Linux中的文件系统权限

    在Red Hat Enterprise Linux 或其他类似的Linux发行版中,全局umask设置通常在几个不同的系统级配置文件中定义。以下是一些可能设置umask的地方: 这是为系统上的所有用户设置全局环境变量和启动程序的地方。通常,umask设置会在这个文件中定义。 对于使用Bash shell的系统,这个文

    2024年01月16日
    浏览(45)
  • <Linux> 基础IO(文件操作、文件描述符fd、重定向)

    1、空文件也要在磁盘占用 我们创建的文件,虽然里面并没有存放数据,但是文件属性也是数据,即便你创建一个空文件,也要占据磁盘空间 2、文件 = 文件内容 + 文件属性 文件内容就是真正写入的内容,文件属性就是文件名、文件大小、文件的权限、拥有者所属组…… 3、文

    2024年02月03日
    浏览(48)
  • 【Linux】基础IO(一) :文件描述符,文件流指针,重定向

    🍎 作者: 阿润菜菜 📖 专栏: Linux系统编程 是不是只有C/C++有文件操作呢?python、java、go等文件接口操作的方法是不太一样的,那如何理解这种现象?有没有统一的视角去看待所有的语言文件操作呢?—我们今天从系统视角去理解 ---- 实际都是通过系统调用来访问 文件=内

    2024年01月18日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包