write函数

read/write函数

旧街凉风 提交于 2020-02-18 03:33:47
调用read函数从打开文件读数据。 #include<unistd.h> ssize_t read( int filedes, void *buf, size_t nbytes); 从 filedes 中读取数据到 buf 中,nbytes 是要求读到的字节数。 返回值:若成功则返回实际读到的字节数,若已到文件尾则返回0,若出错则返回-1。 当从终端设备读时,通常一次最多读一行。 ssize_t 提供带符号的返回值,size_t不带符号。 调用write函数向打开的文件写数据。 #include<unistd.h> ssize_t write (int filedes, const void *buf, size_t nbytes); 从 buf 中写数据到 filedes 中,nbytes 是相求写入的字节数。 返回值:返回值通常与参数 nbytes相同,否则表示出错。 文件描述符 filedes是一个 int型数,通常用文件描述符0与进程的标准输入相关联,文件描述符1与进程的标准输出相关联,文件描述符2与进程的标准出错输出相关联。在依从POSIX的应用程序中, 幻数0,1,2应当替换成符号常量 STDIN_FILENO,STDOUT_FILENO 和 STDERR_FILENO 。这些常量都定义在头文件<unistd.h>中。 标准输入/输出常量 stdin 和 stdout

linux 中的 open() read() write() close() 函数

早过忘川 提交于 2020-01-24 01:59:45
1. open()函数 功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。 所需头文件:#include <sys/types.h>,#include <sys/stat.h>,#include <fcntl.h> 函数原型: int open(const char *pathname,int flags,int perms) 参数: pathname :被打开的文件名(可包括路径名如"dev/ttyS0") flags :文件打开方式, O_RDONLY:以只读方式打开文件 O_WRONLY:以只写方式打开文件 O_RDWR:以读写方式打开文件 O_CREAT:如果改文件不存在,就创建一个新的文件,并用第三个参数为其设置权限 O_EXCL:如果使用O_CREAT时文件存在,则返回错误消息。这一参数可测试文件是否存在。此时open是原子操作,防止多个进程同时创建同一个文件 O_NOCTTY:使用本参数时,若文件为终端,那么该终端不会成为调用open()的那个进程的控制终端 O_TRUNC:若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0 O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件的末尾,即将写入的数据添加到文件的末尾 O_NONBLOCK: 如果pathname指的是一个FIFO

read和write函数

匿名 (未验证) 提交于 2019-12-03 00:43:02
1、write() 函数定义:ssize_t write ( int fd, const void * buf, size_t count); 函数说明:write()会把参数buf所指的内存写入count个字节到参数放到所指的文件内。 返回值:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。 附加说明: (1)write()函数返回值一般无0,只有当如下情况发生时才会返回0:write(fp, p1+len, (strlen(p1)-len)中第三参数为0,此时write()什么也不做,只返回0。 (2)write()函数从buf写数据到fd中时,若buf中数据无法一次性读完,那么第二次读buf中数据时,其读位置指针(也就是第二个参数buf)不会自动移动,需要程序员编程控制, 而不是简单的将buf首地址填入第二参数即可。如可按如下格式实现读位置移动:write(fp, p1+len, (strlen(p1)-len)。 这样write第二次循环时变会从p1+len处写数据到fp, 之后的也 由此类推,直至(strlen(p1)-len变为0。 (3)在write一次可以写的最大数据范围内(貌似是BUFSIZ ,8192),第三参数count大小最好为buf中数据的大小,以免出现错误。(经过笔者再次试验

Pwn中的write()函数和read()函数

匿名 (未验证) 提交于 2019-12-03 00:09:02
1、write() 函数定义:ssize_t write (int fd, const void * buf, size_t count); 函数说明:write()会把参数buf所指的内存写入count个字节到参数放到所指的文件内。 返回值:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。 2、read() 函数定义:ssize_t read(int fd, void * buf, size_t count); 函数说明:read()会把参数fd所指的文件传送count 个字节到buf 指针所指的内存中。 返回值:返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据。若参数count 为0, 则read()不会有作用并返回0。 注意:read时fd中的数据如果小于要读取的数据,就会引起阻塞。 来源:博客园 作者: H4y0 链接:https://www.cnblogs.com/h4y0/p/11558566.html

XCTF level3 write up

烈酒焚心 提交于 2019-12-01 20:17:56
nc了一下平台给的端口号,大概这个样子。 在用ida pro看一下源文件的样子。 寻找一下溢出点。 很明显的栈溢出漏洞,但是没有system函数和/bin/sh字符串了 这里有一个新的模式,泄露函数got表中的地址获取到库中某个函数的真正加载地址,通过偏移找出函数的库,通过然后找出其他函数的真正加载地址,包括system函数也包括/bin/sh字符串 攻击思路: libc中的函数的相对地址是固定的,要想获取到system函数的地址,可以通过write()函数进行offset计算。1. 首先利用write()函数计算出write()函数的真实地址;2. 利用相对offset计算出system和"/bin/sh"的真实地址。 在vulnerable_function()中,先调用了write()函数,然后调用read()函数。write()函数返回到vulnerable_function()后,再进行read()函数调用,这样我们就可以进行二次攻击。 - 第一次攻击我们利用栈溢出将write()函数在got表中的真实地址leak出来,然后减去libc中的offset,就可以得到libc的base address。- 第二次攻击重新进入main函数,再次通过栈溢出,利用system函数进行getshell。 buf 的大小为0x88。 第一次使用的payload构成如下: payload

read、write 与recv、send区别 gethostname

社会主义新天地 提交于 2019-11-30 23:51:08
recv相对于read有什么区别呢? 其实它跟read函数功能一样,都可以从套接口缓冲区sockfd中取数据到buf,但是recv仅仅只能够用于套接口IO,并不能用于文件IO以及其它的IO,而read函数可以用于任何的IO; recv函数相比read函数多了一个flags参数,通过这个参数可以指定接收的行为,比较有用的两个选项是: 这个这次要学习的,它可以接收缓冲区中的数据,但是并不从缓冲区中清除,这是跟read函数有区别的地方,read函数一旦读取了,就会直接从缓冲区中清除。 readline实现 也就是实现按行读取,读取直到\n字符,实际上,它也能解决上节中提到的粘包问题,回顾下上节的粘包问题解决方案: 包尾加\r\n(ftp) 我们只要解释\n为止,表示前面是一个条合法的消息,对于readline的实现,可以有三种方案: ①、最简单的方案就是一个字符一个字符的读取,然后做判断是否有"\n",但是这种效率比较低,因为会多次掉用read或recv系统函数。 ②、用一个static变量保存接收到的数据进行缓存,在下次时从这个缓存变量中读取然后估"\n"判断。但是一旦用到了static变量,这意味着用到的函数是 不可重录函数【关于这个概念,可以参考博文:http://www.cnblogs.com/webor2006/p/3744002.html】 。 ③、偷窥的方法

Pwn中的write()函数和read()函数

為{幸葍}努か 提交于 2019-11-30 04:16:11
1、write() 函数定义:ssize_t write (int fd, const void * buf, size_t count); 函数说明:write()会把参数buf所指的内存写入count个字节到参数放到所指的文件内。 返回值:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。 2、read() 函数定义:ssize_t read(int fd, void * buf, size_t count); 函数说明:read()会把参数fd所指的文件传送count 个字节到buf 指针所指的内存中。 返回值:返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据。若参数count 为0, 则read()不会有作用并返回0。 注意:read时fd中的数据如果小于要读取的数据,就会引起阻塞。 来源: https://www.cnblogs.com/h4y0/p/11558566.html

文件函数write

最后都变了- 提交于 2019-11-29 00:50:06
调用write函数向打开文件中写数据。 #include <unistd.h> ssize_t write(int fd,const void *buf,size_t nbyte); 参数第一个是fd,第二个是缓冲区,第三个是写入的字节。 返回值:成功返回已经写的字节数,失败返回-1。 write错误的原因: 1》磁盘已经写满, 2》超过了给定进程的文件长度限制(unix环境编程 10.11) 上面说的这个函数的内容可以看unix环境编程里的。 这儿之所以写这个函数,是因为自己在源码里见到了这个函数,但是有的源码里的write是重写的,或者是封装了别的函数的。 来源: https://blog.csdn.net/woainilixuhao/article/details/100165701

C语言中read()与write()函数总结

南笙酒味 提交于 2019-11-27 12:13:23
1.都位于<unistd.h>中 read()函数 原型:ssize_t read(int fd,void*buf,size_t count) 参数说明: fd: 是文件描述符,对应0 buf: 为读出数据的缓冲区; count: 为每次读取的字节数(是请求读取的字节数,读上来的数据保 存在缓冲区buf中,同时文件的当前读写位置向后移) int num; read(0,&num,4); write()函数 原型:ssize_t write(int fd,void*buf,size_t count) 参数说明: fd: 是文件描述符,对应1 buf: 需要写入的数据,通常为字符串; count: 每次写入的字节数 char* ch = "hello world\n"; int len = strlen(ch); write(1,ch,len); 来源: https://blog.csdn.net/KiWi_VC/article/details/99671902