readlinux函数
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值。