当前位置:首页 » 操作系统 » readlinux函数

readlinux函数

发布时间: 2022-04-21 18:19:39

1. linux 下read()函数读文本文件问题

那是因为vim自动给你加上换行符了'\n',即0x0a,你可以用ls -l word.txt看一下,文件大小是不是两个字符。

2. linux下系统调用函数read()

open系统调用

open函数的三个参数:

(1)path是已经存在的文件的路径;

(2)oflags参数:若值为 O_RDONLY ,就以只读方式打开文件;

若值为 O_WDONLY,就以只写方式打开文件;

若值为 O_RDWR,就以读写方式打开文件;

(3)参数mode:文件的权限,对于一个已经存在的文件,参数mode是没有用的,通常将其省略,因此这种情况下open调用只需两个参数。

创建新文件:

前面已经说到,当文件不存在时,open会创建一个新文件(仅能是普通文件),我们只需要用 or操作向open的 oflags参数中加入标志O_CREAT即可。这样可以创建一个新的只读文件,但是这没有任何意义,因为所创建的新文件没有任何可读内容。因此一般需要 O_CREAT与 O_WRONLY或 O_RDWR一起使用,此时就需要mode参数了。

例如:

int fd = open("/home/LY/newfile",O_RDWR | O_CREAT,MODE_FILE)

参数mode仅在创建新文件时有效,对于一个已经存在的文件,它没有任何作用。

关于open的flags参数:

除了以上介绍的 open标志外,open还有许多标志,具体的如下表所示:

标志

解释

O_RDONLY

只读方式打开

O_WRONLY

只写方式打开

O_RDWR

读写方式打开

O_APPEND

每次写都追加到文件的尾端

O_CREAT

若文件不存在则创建文件

O_DSYNC

设置同步I/O方式

O_EXCL

如果文件已存在,则出错;必须与O_CREAT一起使用

O_NOCTTY

不将此设备作为控制终端

O_NONBLOCK

不等待命名管道或特殊文件准备好

O_RSYNC

设置同步I/O方式

O_SYNC

设置同步I/O方式

O_TRUNC

将其长度截短为0

write系统调用

write函数的三个参数:

(1)fildes: 文件描述符
(2)buf:指定写入数据的数据缓冲区
(3)nbytes:指定写入的字节数

函数返回值:

成功:已写的字节数

-1 :出错

0:未写入任何数据

例子:

运行结果:

read系统调用

read函数的三个参数:

(1)fildes:文件描述符

(2)buf:指定读入数据的数据缓冲区

(3)nbytes:指定读入的字节数

函数返回值:

成功:已读的字节数

0:未读入任何数据

-1:出错

例子:

运行结果:

close系统调用

通过对 close进行分析,我们会发现close并没有做什么实质工作,它没有刷新任何内核缓冲区,而仅仅是使文件描述符可以重用。

3. linux 中$,read分别是什么意思

楼上的都有理,$这个代表的是普通用户的意思,我觉得你应该问的是shell里面的意思,shell里面就是提取变量。read 读取键盘的输入作为程序往下执行的开始。

4. linux 中 read 命令是什么意思

read命令用于读取终端输入。
类似于c语言中的scanf()函数.

5. linux下的read函数、write函数是属于直接I/O,为什么函数原型的第二项就是要将数据放到输入缓冲区内呢

函数原型第二项是一个形参,不是你理解的那样子哦,在read的时候,这个参数相当于一个容器,用来存放你从磁盘文件中读到的数据;在write的时候,这个参数存放我们要写入到磁盘文件中的数据。有了这个参数我们才能在自己写的程序中对它处理,比如打印显示。还有read、write属于系统调用函数,跟printf这种c库函数不同,它们是直接跟内核打交道的没错。

6. linux下c语言编程read()函数的问题

返回-1的时候,要根据错误码来判断原因,请看下面的函数说明:

表头文件 #include<unistd.h>
定义函数 ssize_t read(int fd,void * buf ,size_t count);
函数说明 read()会把参数fd 所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。
附加说明 如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count 作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。
错误代码 EINTR 此调用被信号所中断。 EAGAIN 当使用不可阻断I/O 时(O_NONBLOCK),若无数据可读取则返回此值。 EBADF 参数fd 非有效的文件描述词,或该文件已关闭。

7. Linux下read函数默认到底是阻塞的还是非阻塞的

不知题主的read是指socket的read还是文件的read。
默认情况下,socket的read是阻塞的;
对文件进行read,要看内核态的read接口是注册为同步接口还是异步接口(可参见file_operations结构体)

8. linux中read,write和recv,send的区别

Linux的recv、send函数和read、write函数都可以用于套接字编程。
区别:
1、recv、send只用于套接字通信;
2、read、write是底层系统调用,只要是文件操作就都可以用, 比如套接字操作,套接字描述符属于是文件描述符的一种,套接字本身在Linux上就叫做套接字文件。
所以read、write函数不光可以用于套接字编程,也可以用于读取其他各种文件,比如用于文件编程读写普通文件。

9. 关于linux下read函数问题

if((((((((from_fd=open(argv[1],O_RDONLY|O_NONBLOCK))))))))==-1)

你的那个if永远都是成功open,最重要的是把from_id的值刷成xxxx了。

注意使用 if时候 ==的级别。

提醒下程序结尾没有return值。

热点内容
小数如何存储 发布:2024-05-16 19:53:52 浏览:214
html页面缓存设置 发布:2024-05-16 19:33:29 浏览:141
云服务器为什么安装不上补丁 发布:2024-05-16 19:27:18 浏览:340
新加坡幸运28规律算法 发布:2024-05-16 19:27:12 浏览:597
安卓菜鸟裹裹怎么标记已取件 发布:2024-05-16 18:59:36 浏览:544
安卓手机可以在哪个平台直播 发布:2024-05-16 18:59:14 浏览:549
小红书上传不动 发布:2024-05-16 18:50:46 浏览:38
为什么安卓手机双清不卡顿 发布:2024-05-16 18:49:51 浏览:104
会推广源码 发布:2024-05-16 18:36:19 浏览:343
台式电脑相片存储 发布:2024-05-16 18:31:16 浏览:989