jit*_*hsk 0 fortran gfortran fortran90
我有一个fortran程序调用C函数并使用open()打开一个文件
main.f90时:
PROGRAM TEST
integer :: oflag, mode
!Set oflag to O_CREAT|O_RDWR
oflag = 66
mode = 600
call test2("test.txt", oflag, mode)
END PROGRAM
Run Code Online (Sandbox Code Playgroud)
test.c的:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#pragma weak test2_ = test2
#pragma weak test2__ = test2
#pragma weak TEST2 = test2
void test2(char* filename, int* flag, int* mode)
{
int fd;
if(-1 == (fd = open(filename, *flag, *mode)))
puts("Returned -1");
}
Run Code Online (Sandbox Code Playgroud)
我编译为:
gcc -c test.c
gfortran main.f90 test.o
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,它会创建文件test.txt,但权限不正确:
---x--x--T 1 xyz users 0 2011-09-24 16:40 test.txt
Run Code Online (Sandbox Code Playgroud)
什么时候应该
-rw------- 1 xyz users 0 2011-09-24 16:45 test.txt
Run Code Online (Sandbox Code Playgroud)
如果我从另一个C程序调用此函数,它工作正常.有人可以指出出了什么问题吗?
规格:64位linux GNU Fortran(SUSE Linux)4.5.0,GCC(SUSE Linux)4.5.0
谢谢,Kshitij
您的常量是错误的,因为权限通常以八进制指定.试试这个程序:
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
printf("oflag=%d mode=%d\n", O_CREAT|O_RDWR, S_IRUSR|S_IWUSR);
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
oflag = 66 mode = 384
600八进制equals 384十进制.
归档时间: |
|
查看次数: |
548 次 |
最近记录: |