[code]pid=fork(); if(pid==0) { write(1,"12345",10); exit(0); } else write(1,"6789",5); exit(0);[/code]现在有个问题,子进程调用write函数的时候输出的字符个数大于实际字符个数,并且同时父进程也在修改标准输出文件,这就导致子进程除了12345以外还多输出了6789 怎么不让这种情况发生?
本帖最后由 beef9999 于 2012-02-20 18:40 编辑 [code]pid=fork(); if(pid==0) { write(1,"12345",10); exit(0); } else write(1,"6789",5); exit(0);[/code]现在有个问题,子进程调用write函数的时候输出的字符个数大于实际字符个数,并且同时父进程也在修改标准输出文件,这就导致子进程除了12345以外还多输出了6789 怎么不让这种情况发生?
本帖最后由 yaoming1718 于 2010-12-09 23:30 编辑
本人初学linux 看《linux环境下c编程指南》一书 对书中例子有疑问,向大家请教
代码如下
利用write函数实现一个write_buffer函数,创建文件“test.txt”,从键盘输入字符串写入文件,成功后打开文件为乱码,求解答?
直接用write函数的话,打开test.txt则能看到正常显示。
#include
在1.2.13内核中函数tcp_write里面1400行有个continue,这个continue包含在条件语句if ((skb = tcp_dequeue_partial(sk)) != NULL) 中,但是这个函数下面还有语句,那么什么情况下不执行那个continue,而继续执行下面的代码呢?谢谢
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博客,如果查...
用write函数向打开文件写数据。 #include ssize_t write(int filedes, const void *buff, size_t nbytes) ; 返回:若成功为已写的字节数,若出错为- 1 其返回值通常与参数nbytes的值相同(原书有误),否则表示出错。 write出错的一个常见原因是:磁盘已写满; 或者超过了对一个给定进程的文件长度限制 对于普通文件,写操作从文件的当前位移量处开始。如果在打开该文件时...
按照书上写 了一个程序结果是正确的,但有的地方看不懂,请大虾指教 了谢谢阿 :)
以下是程序,看不懂为什么从hello1文件读出一次内容后他的文件描述符fds[0]就变为0
了 ,而向hello2文件里写一次以后他的文件描述符就不变阿。这个程序完成的功能是每
隔10s中就向hello2文件写一次数据。
#include
按照书上写 了一个程序结果是正确的,但有的地方看不懂,请大虾指教 了谢谢阿 :)
以下是程序,看不懂为什么从hello1文件读出一次内容后他的文件描述符fds[0]就变为0
了 ,而向hello2文件里写一次以后他的文件描述符就不变阿。这个程序完成的功能是每
隔10s中就向hello2文件写一次数据。
#include
我的目的是想捕捉一个第三方程序发送给串口设备的数据,程序是通过write函数发送数据的。 我的思路是找到write在内核中调用的函数,然后在该函数中将传入的参数记录到文件中即可,那请问大家sys_write这个函数是不是就是我要找的函数呢? 如果是的话,那我怎么才能把数据记录到文件中呢?用fopen方式应该不可以了吧,或者打印出来也可以,我试过用printk打印我要的信息,然后重启编译内核,将内核替换后,发现...
似乎是因为write默认是非阻塞的? 我整个write运行时间大概是9~10s 但是用clock测试总是接近0~clock()应该不会错的。 不过设置了write阻塞也是这样。。用了fcntl和ioctl都不行。。不知道是不是设置有问题。。还是其他的问题。。