在windows下面用open操作文件描述符

arden1019 2007-01-18 03:29:25
有一个linux下的库要迁到windows。
其中使用了open(const char *,int,...) 来得到文件描述符。从来没有在windows下用过fd,请哪位大大告知一下,windows支持fd么?需要include那个头文件?
多谢。
...全文
1058 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
htqx 2007-02-19
  • 打赏
  • 举报
回复
POSIX API 在vista里面不是取消了么。
windows还是用winapi吧。
iambic 2007-02-19
  • 打赏
  • 举报
回复
可以用MinGW,这些基本的IO操作支持得还是不错的。
prozilla 2007-02-18
  • 打赏
  • 举报
回复
<io.h>
doubhor 2007-01-31
  • 打赏
  • 举报
回复
windows下面操作文件有两种思路:
一。使用fopen, fclose, fseek, fread, fwrite, fseek等C标准函数
二。使用CreateFile,ReadFile,WriteFile等API函数

arden1019 2007-01-31
  • 打赏
  • 举报
回复
在VC下面写下面c程序,当不设置NODEFAULTLIB,也就是说使用编译器的默认库时,可以编译工作也正常。
我想 open write read 等....还是在某个默认库里有定义的,只是不知道那一个~

int main(void)
{
int fd;
char *buf="something to write";
fd=open("c:\\1.txt",1);
if (fd)
{
write(fd,buf,strlen(buf)+1);
}
close(fd);
return 0;
}
jixingzhong 2007-01-23
  • 打赏
  • 举报
回复
int fread(void *ptr,int size,int nitems,FILE *stream) 从流stream中读入nitems
个长度为size的字符串存入ptr中
int fwrite(void *ptr,int size,int nitems,FILE *stream) 向流stream中写入nitems
个长度为size的字符串,字符串在ptr中

注意 open read write 使用的是一个 文件 handle ,
而 fopen fread fwrite 使用的是一个 文件结构体指针 FILE *。
(包含 stdio.h 即可)
jixingzhong 2007-01-23
  • 打赏
  • 举报
回复 1
FILE *fopen(char *filename,char *type) 打开一个文件filename,打开方式为type,
并返回这个文件指针,type可为以下字符串加上后缀
┌──┬────┬───────┬────────┐
│type│读写性 │文本/2进制文件│建新/打开旧文件 │
├──┼────┼───────┼────────┤
│r │读 │文本 │打开旧的文件 │
│w │写 │文本 │建新文件 │
│a │添加 │文本 │有就打开无则建新│
│r+ │读/写 │不限制 │打开 │
│w+ │读/写 │不限制 │建新文件 │
│a+ │读/添加 │不限制 │有就打开无则建新│
└──┴────┴───────┴────────┘
可加的后缀为t、b。加b表示文件以二进制形式进行操作,t没必要使用
例: ┌──────────────────┐
│#include<stdio.h> │
│main() │
│{ │
│ FILE *fp; │
│ fp=fopen("C:\\WPS\\WPS.EXE","r+b");│
└──────────────────┘

比较:
int open(char *pathname,int access[,int permiss])为读或写打开一个文件,
按后按access来确定是读文件还是写文件,access值见下表
┌────┬────────────────────┐
│access值│意义 │
├────┼────────────────────┤
│O_RDONLY│读文件 │
│O_WRONLY│写文件 │
│O_RDWR │即读也写 │
│O_NDELAY│没有使用;对UNIX系统兼容 │
│O_APPEND│即读也写,但每次写总是在文件尾添加 │
│O_CREAT │若文件存在,此标志无用;若不存在,建新文件 │
│O_TRUNC │若文件存在,则长度被截为0,属性不变 │
│O_EXCL │未用;对UNIX系统兼容 │
│O_BINARY│此标志可显示地给出以二进制方式打开文件 │
│O_TEXT │此标志可用于显示地给出以文本方式打开文件│
└────┴────────────────────┘
jixingzhong 2007-01-23
  • 打赏
  • 举报
回复
是的, open read write 都不是标准库中的内容。

请使用 fopen fread fwrite
arden1019 2007-01-23
  • 打赏
  • 举报
回复
没人理了 :(
arden1019 2007-01-22
  • 打赏
  • 举报
回复
我在我的VC里面怎么用阿?open read write 这些东西不是C标准库里面的吧?我可没有在标准库中找到过...
gangjh 2007-01-20
  • 打赏
  • 举报
回复
我用mingw編譯的.
Wolf0403 2007-01-18
  • 打赏
  • 举报
回复
1楼的程序是 CYGWIN 编译还是 MINGW 编译的?按理说 WINDOWS 支持 POSIX API,但是没见人用过。
pyrophile 2007-01-18
  • 打赏
  • 举报
回复
标准库的东西,一般都能移植的
gangjh 2007-01-18
  • 打赏
  • 举报
回复
如果可能,還是改成fopen比較好.方便移植
dx30611 2007-01-18
  • 打赏
  • 举报
回复
需要stdio
这个函数是标准的函数,各个平台上都通用,如果是windows api就是像ReadFile,与linux上有些概念上的差异
dx30611 2007-01-18
  • 打赏
  • 举报
回复
fopen
gangjh 2007-01-18
  • 打赏
  • 举报
回复
如果你在windows下用gcc,
這里有個範例.

1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <fcntl.h>
6
7
8 #define BSIZE 200
9 int main(int argc, char *argv[])
10 {
11 int fp, rsize ;
12 char buf[BSIZE] ;
13
14 if ( access(argv[1], F_OK) !=0) {
15 printf("file not exists\n");
16 exit(1) ;
17 }
18
19 fp = open(argv[1], O_RDONLY) ;
20 while ((rsize =read(fp, buf, BSIZE)) >0) {
21 write(fileno(stdout), buf, rsize) ;
22 }
23
24
25 close(fp) ;
26 exit(0) ;
27 }
      信创趋势下,资源围绕网络管理员、网络工程师等岗位对openEuler服务器版管理核心技术技能的要求,应用工作过程系统化方法开发了包括统信UOS简介、shell、Bash、目录结构、文件系统、VIM编辑器、用户与组、SSHD远程登录、网络简介、安全策略、软件源、UOS文件权限、UOS磁盘管理、SAMBA服务、DHCP服务、DNS服务、WEB服务、FTP服务、代理服务器、邮件服务器、防火墙、NAT转换等14个项目,场景化的还原企业实际项目和业务流程。每个项目都按企业工作实际分解为若干个工作任务,通过项目背景、项目分析、项目相关知识为子任务做铺垫,任务实施过程中由任务规划、任务实施和任务验证构成,符合工程项目实施的一般规律。  本课程主要学习内容:  1、服务器基础配置:项目1 部署openEuler服务器系统项目2 使用shell管理本地文件项目3 管理openEuler的用户与组项目4 openEuler系统的基础配置       2、基础服务部署:项目5 企业内部数据存储与共享项目6 部署企业的DHCP服务项目7 部署企业的DNS服务项目8 部署企业的WEB服务项目9 部署企业的FTP服务       3、高级服务部署:项目10 部署企业squid代理服务器项目11 部署企业的邮件服务器项目12 部署openEuler服务器防火墙课程考核:综合项目实训/课程考评

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧