1. 系统api与库函数的关系

man 2 open

1.1 open

1.2 read/write

实现cat功能

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h> int main(int argc, char *argv[])
{ if (argc != )
{
printf("./a.out filename\n");
return -;
} int fd = open(argv[], O_RDONLY); //读,输出到屏幕
char buff[];
int ret = ;
while (ret = read(fd, buff, sizeof(buff)))
{
write(STDOUT_FILENO, buff, ret); } close(fd); return ;
}

1.3 lseek

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h> int main(int argc, char *argv[])
{ if (argc != )
{
printf("./a.out filename\n");
return -;
} int fd = open(argv[], O_RDWR|O_CREAT, ); write(fd, "helloword", );
//文件读写的位置此时到末尾
//需要移动读写的位置
lseek(fd, , SEEK_SET); char buf[] = {};
int ret = read(fd, buf, sizeof(buf)); if (ret)
{
write(STDOUT_FILENO, buf, ret);
} close(fd); return ;
}

计算大小

    int fd = open(argv[], O_WRONLY);

    int ret = lseek(fd, , SEEK_END);

    printf("file size is %d\n", ret);

    close(fd);

拓展文件

    //1. open
int fd = open(argv[], O_WRONLY|O_CREAT, ); int ret = lseek(fd, , SEEK_END); printf("file size is %d\n", ret); //需要至少写一次,否则不能保存
write(fd, "a", ); close(fd);

1.4 阻塞

  • read函数在读设备或者的读管道,或者读网络的时候。
  • 输入输出设备对应 /dev/tty
int fd = open("/dev/tty", O_RDWR|O_CREAT|O_NONBLOCK);

1.5 fcntl函数--设置非阻塞

#include <unistd.h>
#include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ );
int flags = fcntl(fd, F_GETFL);
flags |= O_NONBLOCK;

Linux基础(一)系统api与库函数的关系的更多相关文章

  1. Linux 基础一(系统分区、格式化与挂载)

    1.Linux 基础之系统分区与格式化 讲分区之前,先说一下硬盘结构:硬盘(机械)的横截面是一个圆,并且被分成等大小的扇区,每个扇区的大小是 512Byte,其中有 446Byte 被用来存储启动信息 ...

  2. Linux基础-6.系统的启动过程

    Linux启动时我们会看到许多启动信息 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导 运行init 系统初始化 建立终端 用户登录系统 init程序的类型: ...

  3. Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python

    作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...

  4. Linux基础四---系统监控&硬盘分区

    ---恢复内容开始--- 一系统分区 1.top [参数] -b 批处理 -c 显示命令完全模式 -I 忽略失效过程 -s 保密模式 -S 累积模式 -i<时间> 设置间隔时间 -u< ...

  5. Linux基础命令-系统时间

    Linux启动时从硬件读取日期和时间信息,读取完成以后,就不再与硬件相关联 Linux的两种时钟 系统时钟:由Linux内核通过CPU的工作频率进行的: date:显示系统时间 +%D +%F dat ...

  6. Linux基础系列-系统密码破解

    无引导介质(光盘.iso)救援模式下root密码破解 第一步: GRUB启动画面读秒时按上下方向键,进入GRUB界面 第二步: 使用上下光标键选择要修改的操作系统启动内核(默认选择的即可),按e键进行 ...

  7. linux内核系统调用和标准C库函数的关系分析

    http://blog.csdn.net/skyflying2012/article/details/10044343

  8. Linux基础学习(1)--Linux系统简介

    第一章——Linux系统简介 1.UNIX和Linux发展史: 1.1 unix发展史: (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发Mul ...

  9. Linux基础二(挂载、关机重启与系统等级)

    一.Linux 基础之挂载 1. 挂载和查询 1.1 挂载 什么叫挂载?装系统的时候要给硬盘分区,在 Windows 中要分 C 盘 D 盘 DEF 盘,这个操作我们叫做分配盘符,分配盘符之后我们就可 ...

随机推荐

  1. ssh-keygen适用场景与rsync使用id_rsa技巧

    ssh-keygen工具可以实现免密码登录服务器可参考之前的blog:http://www.cnblogs.com/Mrhuangrui/p/4565333.html写的比较粗糙 原理说明使用ssh- ...

  2. 【题解】 bzoj2462: [BeiJing2011]矩阵模板

    题面戳我 Solution 二维矩阵\(hash\),判断即可 自己YY了一个方法,\(bzoj\)T到飞,(一开始还用的三\(hash\)),交到luogu貌似跑的不慢啊qwq (我是不会告诉你全输 ...

  3. SCOI2016 Day2 简要题解

    「SCOI2016」妖怪 题意 有 \(n\) 只妖怪,每只妖怪有攻击力 \(\text{atk}\) 和防御力 \(\text{dnf}\) ,在环境 \((a, b)\) 下,它可以把攻击力和防御 ...

  4. [CQOI2017]小Q的表格(数论+分块)

    题目描述 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. 为了完成任务,小Q需要列一个表格,表格有无穷多 ...

  5. java ArrayList去重

    对list集合中的重复值进行处理,大部分是采用两种方法, 一种是用遍历list集合判断后赋给另一个list集合, 另一种是用赋给set集合再返回给list集合. 方法1:set集合去重,不打乱顺序 L ...

  6. css 选择其父元素下的某个元素

    一,选择器 :first-child   p:first-child(first第一个 child子元素)(找第一个子元素为p) :last-child    p:last-child(last倒数 ...

  7. 利用twilio进行手机短信验证

    首先要注册 twilio 账号但是由于twilio人机验证用的是Goole所有注册需要FQ 完成后去免费获取15元使用 然后 pip install twilio 注册完成后会在个人首页显示你的免费金 ...

  8. io系列之常用流二

    一.对象的序列化.持久化. 将java的对象的基本数据类型和图形存入文件中,实现对象数据的序列化和持久化. 操作对象可以使用: ObjectOutPutStream 和 ObjectInPutStre ...

  9. (string 数组) leetcode 804. Unique Morse Code Words

    International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...

  10. hibernate的学习周

    Hibernate核心:ORM(对象关系映射) BeginSession关闭的时候要session.close(),而getCurrentsession不需要,它会自动关闭 Session.load( ...