今天在使用open()函数时出了点小问题`
fd = open("/home/wch/projects/WriteFile", O_CREAT | O_WRONLY | O_APPEND);
if (fd < 0)
{
perror("open file error");
return 0;
}
else
{
/*memset(writeFile,0,sizeof(writeFile));
strcpy(writeFile,"welcome to Linux,wch");
w_size = write(fd,writeFile,strlen(writeFile));
std::cout << "size=" << w_size << endl;*/
std::string str;
std::cin >> str;
w_size = write(fd, str.c_str(),str.size());
发现在Linux中得到的文件是二进制文件,且无法打开
然后去查找手册发现open的两种函数原型
然后查找linux系统里自带的手册
S_IRWXU00700 权限, 代表该文件所有者具有可读、可写及可执行的权限.
S_IRUSR 或S_IREAD, 00400 权限, 代表该文件所有者具有可读取的权限.
S_IWUSR 或S_IWRITE, 00200 权限, 代表该文件所有者具有可写入的权限.
S_IXUSR 或S_IEXEC, 00100 权限, 代表该文件所有者具有可执行的权限.
S_IRWXG 00070 权限, 代表该文件用户组具有可读、可写及可执行的权限.
S_IRGRP 00040 权限, 代表该文件用户组具有可读的权限.
S_IWGRP 00020 权限, 代表该文件用户组具有可写入的权限.
S_IXGRP 00010 权限, 代表该文件用户组具有可执行的权限.
S_IRWXO 00007 权限, 代表其他用户具有可读、可写及可执行的权限.
S_IROTH 00004 权限, 代表其他用户具有可读的权限
S_IWOTH 00002 权限, 代表其他用户具有可写入的权限.
S_IXOTH 00001 权限, 代表其他用户具有可执行的权限.
感觉应该是写文件的权限问题,这里我用了open的第二种函数原型去写文件,后来发现得到的文件不再是二进制文件了,而是可读可写可执行文件。
fd = open("/home/wch/projects/WriteFile", O_CREAT | O_WRONLY | O_APPEND, S_IRWXU);
得到的文件
打开的文件内容与输入的内容相同
后来发现可以不用系统定义好的宏,用0777也可以。0777也可以实现写入的文件最后变成可读可写可执行文件。
`