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

arden1019 2007-01-18 03:29:25
有一个linux下的库要迁到windows。
其中使用了open(const char *,int,...) 来得到文件描述符。从来没有在windows下用过fd,请哪位大大告知一下,windows支持fd么?需要include那个头文件?
多谢。
...全文
1163 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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 }

70,022

社区成员

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

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