linux中文件读写的系统调用

文件读写是程序设计中最常用的操作,文件在linux有着特别重要的意义,因为在linux下一切东西都是文件。linux中对于磁盘文件,打印机、串行口或者其他设备的操作,都可以通过文件的操作进行,多少情况只用五个基本的文件操作函数就够了。

linux中对文件和操作的的知识点。

  1. linux中对文件操作的五个基本函数。 open、read、write、close、ioctl 。
  2. 三个重要的设备文件 /dev/console 控制台文件,/dev/tty控制终端文件 ,/dev/null 黑洞文件
  3. 通常一个进程会关联三个文件描述符。 0 ,1,2分别是 标准输入、标准输出、标准错误

linux系统调用 write 示例

# file: write.c

#include <unistd.h>
#include <string.h>

/*
 #include 
 size_t write(int fildes, const void *buf, size_t nbytes);
 */


int main() {
    char *str0 = "0 - hello world\n";
    char *str1 = "1 - hello world\n";
    char *str2 = "2 - hello world\n";

    write(0, str0, strlen(str0) + 1);
    write(1, str1, strlen(str1) + 1);
    write(2, str2, strlen(str2) + 1);
    return 0;
}

linux系统调用 read 示例

# file: read.c

#include <unistd.h>

/*
#incluce <unistd.h>
size_t read(int fildes, void *buf, size_t nbytes);
*/
int main() {
    int maxchar = 245;
    char buf[maxchar];
    int nread;

    nread = read(0, buf, maxchar);

    if (nread == -1) {
        write(2, "read error\n", 11);
    }

    write(1, "myread: ", 8);
    
    if ((write(1, buf, nread)) != nread) {
        write(2, "write error\n", 12);
    }

    return 0;
}

编译运行查看

gcc read.c -o myread
gcc write.c -o mywrite

# 运行 mywrite
./mywrite
0 - hello world
1 - hello world
2 - hello world

# 重定向1
./mywrite > a.txt
0 - hello world
2 - hello world

cat a.txt
1 - hello world

# &> 标准输出和错误输出都重定向
./mywrite &> a.txt
0 - hello world

cat a.txt
1 - hello world
2 - hello world

# 0> 标准输入也可以重定向
./mywrite 0> a.txt
1 - hello world
2 - hello world

cat a.txt
0 - hello world



# 管道测试1 -- ./mywrite 输出到 文件描述符1(标准输出)的内容输入到 ./myread 中然后 ./myread 将其输出

./mywrite | ./myread
0 - hello world
2 - hello world
myread: 1 - hello world


# 管道测试2 -- ./mywrite 屏蔽标准输出和标准错误

./mywrite &> /dev/null | ./myread
myread: 0 - hello world


# 管道测试3 |& 标准错误管道
 ./mywrite 0> /dev/null |& ./myread
myread: 1 - hello world
2 - hello world

 

 

 

留下评论