Read and write in c++
Read and write in c++
我正在尝试使用系统调用read()和write()。下面的程序创建一个文件并向其中写入一些数据。代码如下:
int main()
{
int fd;
open("student",O_CREAT,(mode_t)0600);
fd=open("student",O_WRONLY);
char data[128]="Hi nikhil, How are u?";
write(fd,data,128);
}
在执行上面的程序后,我得到了一个名为student的文件,大小为128字节。
int main()
{
int fd=open("student",O_WRONLY);
char data[128];
read(fd,data,128);
cout<<(char*)data<<endl;
}
但是我得到的输出是垃圾字符....为什么会这样呢?
我写了一个小程序来从文件中读取数据。她是密码。但是输出
不要从您以O_WRONLY
模式打开的文件中read
!
帮你自己一个忙,总是检查IO函数的返回值。
你也应该总是close
文件描述符,你已经(成功地)open
。可能不重要的代码像这样,但如果你养成了忘记这一点的习惯,你最终会写代码泄漏文件描述符,这是一件坏事。
您没有检查read()
是否返回错误。您应该这样做,因为您的问题中的代码可能就是这种情况。
由于首先打开的是文件write-only,因此对其调用read()
将导致错误。您应该打开文件以供阅读:
char data[128];
int fd = open("student", O_RDONLY);
if (fd != -1) {
if (read(fd, data, sizeof(data)) != -1) {
// Process data...
}
close(fd);
}
首先,您的数据不是128字节。你的数据是字符串:"Hi nikhil, How are u?",少于128字节。但是你从数组写入128字节到文件。初始字符串之后的所有内容都将是内存中的随机垃圾,因为char数组只初始化了21字节的数据。所以接下来的107字节是垃圾
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- std::async from std::async in windows xp