Linux应用层学习——Day3(系统调用)

open

#include <unistd.h>
#include<fcntl.h>
#include<stdio.h>

int main()
{   
    //open (const char *__path, int __oflag, ...)
    //const char *__path:打开文件的路径
    //int __oflag:打开文件的模式
    // (1) O_RDONLY只读模式
    // (2) O_WRONLY 只写模式
    // (3) O_RDWR 读写模式
    // (4) O_CREAT 创建新文件,如果文件存在,则清空
    // (5) O_TRUNC 若文件存在,则清空文件
    // (6) O_APPEND 若文件存在,则追加写
    // (7) O_EXCL 如果 O_CREAT 被设置,并且同一时间另一个进程也在创建该文件,则返回 -1
    // (8) O_NOCTTY 如果 O_CREAT 被设置,并且 __path 所指的文件是一个终端设备,则返回 -1
    // (9) O_NOFOLLOW 如果 O_CREAT 被设置,并且 __path 所指的文件是一个符号链接,则返回 -1
    // ...可变参数:O_CREAT 创建文件的权限 0664代表 读写 读写 读 0开头代表八进制
    //return: 文件描述符 如果打开文件失败 返回-1 同时设置全局变量errno表示对应的错误

    //Linux有文件权限保护位 默认创建的权限会被删除掉其他用户的权限
    int fd = open("io1.txt",O_RDONLY | O_CREAT,0664);
    if(fd == -1)
    {
        printf("打开失败");
    }

    return 0;
 }

Makefile

unistd_test: unistd_test.c
	-$(CC) -o $@ $^
	-./$@
	-rm ./$@	

执行后的结果查看权限
在这里插入图片描述

read

		//read (int __fd, void *__buf, size_t __nbytes)
        //int __fd: 要读取的文件的描述符
        //void *__buf: 接收读取的数据的缓冲区
        //size_t __nbytes: 要读取的字节数
        //return: ssize_t ->long int: 读取到数据的字节长度 成功大于0 失败-1
        read(fd,buffer,sizeof(buffer))

综合示例

此代码的作用是读取文本文件内的内容并输出

# include <unistd.h>
# include <fcntl.h>
# include <stdio.h>
# include <stdlib.h>

int main()
    {
        int fd = open("io.txt",O_RDONLY);
        if(fd == -1)
        {   
            perror("open");
            //printf("打开文件失败");
            exit(EXIT_FAILURE);
        }

        char buffer[1024]; //存放读取数据
        ssize_t bytes_read;
        //read (int __fd, void *__buf, size_t __nbytes)
        //int __fd: 要读取的文件的描述符
        //void *__buf: 接收读取的数据的缓冲区
        //size_t __nbytes: 要读取的字节数
        //return: ssize_t ->long int: 读取到数据的字节长度 成功大于0 失败-1
        while ((bytes_read = read(fd,buffer,sizeof(buffer)))>0)
        {   
            //ssize_t write (int __fd, const void *__buf, size_t __n) __wur
            //int __fd: 要写入的文件的描述符
            //const void *__buf: 要写入的数据
            //size_t __n: 要写入的字节数
            //return: ssize_t -> long int: 成功返回写入的字节数 失败-1
            write(STDOUT_FILENO,buffer,bytes_read);
        }
        
        if(bytes_read == -1)
        {   
            perror("read");
            //成功返回0 失败返回-1
            close(fd);
            exit(EXIT_FAILURE);
        }
        close(fd);
        return 0;
    }

Makefile

system_call_test: system_call_test.c
	-$(CC) -o $@ $^
	-./$@
	-rm ./$@	

输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sol-itude

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值