本帖最后由 yaoming1718 于 2010-12-09 23:30 编辑
本人初学linux 看《linux环境下c编程指南》一书 对书中例子有疑问,向大家请教
代码如下
利用write函数实现一个write_buffer函数,创建文件“test.txt”,从键盘输入字符串写入文件,成功后打开文件为乱码,求解答?
直接用write函数的话,打开test.txt则能看到正常显示。
#include
by yaoming1718 - Linux环境编程 - 2010-12-10 12:41:37 阅读(2933) 回复(3)
write函数本来是用来向一个文件句柄(file descriptor)输入内容的,通常的用法是: int fd; fd = open(filename, MODE); write(fd, buf, size); close(fd); 由于linux系统中有三个默认的句柄,即标准输入、标准输出、标准出错,对应标准C中的文件句柄(FILE)是stdin、stdout、stderr,在linux系统中是整数值0,1,2 因此,当我们往1句柄write内容时,就是在标准输出设备上显示内容,比如我们的终端上。 本文来自ChinaUnix博客,如果查...
通过讨论今天终于确定,linux的系统调用write不能实现在文本文件的中间进行添加操作。它可以实现在文件尾部添加,和在文件的中间覆盖的功能。我想只要清楚内核中文件系统原理的人都会很容易理解这一点。:) 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/6889/showart_111731.html
我做了两个实验: 第一个实验,创建一个本地文件,然后用5个线程对这个文件进行写入,结果前面的写入内容被后面的写入内容覆盖;对write函数加锁之后结果就正常了,就似乎验证了write函数是非线程安全的。 第二个实验,创建一个客户端的TCP socket,然后用5个线程对这个socket进行写入;服务器端把内容读取出来并打印,发现打印结果与客户端发送内容一致,没有出现异常,似乎说明write TCP socket是线程安全的。 我的问题是: ...
本人最近在写linux下的串口编程,是一个有串口的台式机和STM32的单片机板子的串口通信,板子上的串口通信是可行的,因为在window下的串口调试工具测试了,收发数据都是没有问题的,可是在linux下,read函数可以收到板子发来的数据,可是却不能向板子发送数据,板子中的程序是这样的:当收到数据是,做适当的延时后,把收到的数据再发给台式机。 read函数可以收到数据在终端显示,但是write函数将缓冲区的数据发送,返回值是要发的...
本帖最后由 飘扶摇 于 2011-05-26 23:41 编辑 ssize_t xxx_read(struct file *filp, char *buffer, size_t count, loff_t *ppos); ssize_t xxx_write(struct file *filp,const char *buffer, size_t count); 上面两个函数中的"buffer" 是什么时候分配出来的,分配在什么地方,是内核分配的吗?
简单的读一个文件: #include #include #include #include int main(int argc,char **argv) { int fd = 0; int pid = 0; char buffer[20] = {'\0'}; char *read_buffer[20] = {'\0'}; //fd = open("/dev/hello",O_RDWR | O_CREAT | O_TRUNC); fd = open("/dev/hello",O_RDONLY ); //| O_NONBLOCK); printf("fd=%d\n",fd); if(fd #include #include #inclu...
open调用成功返回值是不是为0? read(filename,buffer,number),成功调用返回的值是不是读取的字节数number? write(filename,buffer,number),成功调用返回的值是不是写入文件的字节数number?
linux文件设备与I/O:read/write函数 与 阻塞 Block 一,read 函数从打开的设备或文件中读取数据 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次 read返回0 读上来的数据保存在缓冲区buf 中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是...
一,read 函数从打开的设备或文件中读取数据 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次 read返回0 读上来的数据保存在缓冲区buf 中,同时文件的当前读写位置向后移。注意这个读写位置和使用C标准I/O库时的读写位置有可能不同,这个读写位置是记在内核中的,而使用C标准I/O库时的读写位置是用户空间I/...
大家好,我在阅读linux的tcp部分源码时遇到一个问题,望各位大侠帮助解答,具体问题描述如下:
tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_una)
{
...
for (i=0; i