C中read()和fgets()的区别
我想从标准数据流中读取数据。使用read()或fgets()从stdin流中读取有什么区别吗 我附上以下两段带有fgets和read的代码。 有了fgets,我可以使用java程序轻松地编写和读取c程序。 读写时,我的java程序挂起,等待C程序的输出,而C程序没有输出 我只是在读一行用buf写的,并在上面加了一个 Java程序能够与以下使用FGET和puts的程序进行对话C中read()和fgets()的区别,c,fgets,C,Fgets,我想从标准数据流中读取数据。使用read()或fgets()从stdin流中读取有什么区别吗 我附上以下两段带有fgets和read的代码。 有了fgets,我可以使用java程序轻松地编写和读取c程序。 读写时,我的java程序挂起,等待C程序的输出,而C程序没有输出 我只是在读一行用buf写的,并在上面加了一个 Java程序能够与以下使用FGET和puts的程序进行对话 #include <stdio.h> #include <string.h> #define SI
#include <stdio.h>
#include <string.h>
#define SIZE 200000
main()
{
int rc;
int df;
int i;
char buf[SIZE];
for(i=0;i<=120000;i++) {
memset(buf,'\0',SIZE);
if(!fgets(buf,SIZE-1,stdin))
continue;
strcat(buf,"A_A_A_A_A_A_A");
puts(buf);
}
}
有人能说出原因吗。我仍然觉得很难弄明白
是一个函数,fgets
是一个系统调用read
是标准C,fgets
不是read
是标准缓冲区,fgets
不是read
可用于fgets
,文件*
可用于文件描述符read
读取直到换行,fgets
读取您告诉它的内容read
需要更多吗?一个(
read
)尝试读取指定数量的字节,而另一个(fgets
)尝试读取一行并将在换行时停止。这两个函数没有任何共同之处。read是POSIX系统调用,它从文件句柄读取。FGET是从一个文件中读取的C库函数*./P>< P>有一个重要的选择(<代码> Frad ),它有点在中间,所以这个问题应该被分成两个部分,并且这两个问题已经得到了很好的回答:
两者的区别是什么
两者的区别是什么
快速经验法则:使用fgets
如果您想逐行读取文本数据,请在其他地方使用fread
。\include
#include <stdio.h>
char fgets (char * restrict str, int size, FILE * restrict stream)
char fgets(char*restrict str,int size,FILE*restrict stream)
fgets()函数从给定流中读取的字符数最多比大小指定的字符数少一个,并将其存储在字符串str中。当发现换行符、文件结尾或错误时,读取将停止
参考资料:
#include <unistd.h>
ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
#包括
分配表(整数字段、空*buf、大小字节、偏移量);
read()函数将尝试从与打开的文件描述符fildes相关联的文件中读取nbyte字节到buf指向的缓冲区中。未指定同一管道、FIFO或终端设备上多个并发读取的行为
参考资料:@DarkDust他只有7个问题,还算不错:-)@cnicutar:考虑到他的两个问题是半年前提出的,另一个也是3月或4月提出的,这很糟糕。嘿,很抱歉,我不知道接受答案的机制。我会为opengroup做+1@Andrei(而不是cplusplus)。。。但您可以在链接中使用而不是POSIX.1-2004;)更新了参考链接@pmg。谢谢你纠正我的回答。@Andrei。。。基于上述程序,我无法判断是否使用fgets读取标准数据或读取标准数据。类似地,puts(buf)帮助我通过外部程序从标准输出读取数据,写入(标准输出,buf)也是如此。但是读写速度很慢,然后使用外部java程序执行puts和puts GET操作……您能帮助清除吗this@ssD,如何从java调用c程序?@Andrei我正在使用Process.getruntime()然后使用BufferedWriter和BufferedReader在外部c程序中读写
fgets()
向缓冲区追加一个空字节(这给了strcat()一个起点);read()
没有。
#include <unistd.h>
ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);