请教系统调用的问题,附带一个相关程序的问题!

arcsiny 2003-09-15 02:50:53
#include <unistd.h>
#include <fcntl.h>
int main(){
int fd;
char buf[512];

fd = open("/usr/tmp/exam.c", O_RDONLY);
if (fd >= 0)
read(fd, buf, sizeof(buf));
return 0;
}
这是从一篇文档中取下的example,我在vmware下调试,输出结果是“couldn't open",不知什么地方有问题?还有一个奇怪现象,同一个程序也是与文件操作有关的,第一天运行正常,第二天却显示 could not open,不知为什么??

另外,有关系统调用时,比如上面的open,要调用sys_open(),通过set_system_gate(0x80,&system_call),进入,而set_system_gate是在初始化时执行的,一旦初始化完了系统调用还是从这里通过int 0x80进入吗?

请指教!谢谢

...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2003-09-19
  • 打赏
  • 举报
回复
1、怎么编译连接的?
2、这个信息是应用输出的还是shell输出的?
3、strace appname看看是什么错误?
wwwunix 2003-09-16
  • 打赏
  • 举报
回复
1、这个open是你自己改的吗?
2、open可以直接调用。
arcsiny 2003-09-16
  • 打赏
  • 举报
回复
wwwunix(木易) 多谢您的热情。
按照你的改法,输出还是 could not open,所以open根本没有执行

我最近在做系统调用方面的东西,不知道直接调用一个系统调用会不会成功
以前打开一个文件用fopen(),但用它也有问题。

本来猜测是vmware的问题,我这里没有直接linux的系统,不知道在它下面编译会不会有问题?
wwwunix 2003-09-15
  • 打赏
  • 举报
回复
2.改完后,输出结果照常
是指什么?那你怎么知道open()出错?
arcsiny 2003-09-15
  • 打赏
  • 举报
回复
1.exam.c存在
2.改完后,输出结果照常

应该是open()这个系统调用有问题,可就是不知道为什么?
昨天我用fopen()打开过一个文件,今天就开不了,难道是vmware的问题?
wwwunix 2003-09-15
  • 打赏
  • 举报
回复
改成下面的代码看看出错信息.
#include <unistd.h>
#include <fcntl.h>
int main(){
int fd;
char buf[512];

fd = open("/usr/tmp/exam.c", O_RDONLY);
if (fd >= 0)
read(fd, buf, sizeof(buf));
else
perror("open error");
return 0;
}
marlboro 2003-09-15
  • 打赏
  • 举报
回复
/usr/tmp/exam.c 存在吗?若没有建一个试试.

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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