user-0 提问: 求助，关于get_opt和open等函数

回复:
user: user-1
content: CREAT Section: POSIX Programmer's Manual (P) Updated: 2003  --------------------------------------------------------------------------------    NAME creat - create a new file or rewrite an existing one    SYNOPSIS #include <sys/stat.h>  #include <fcntl.h>    int creat(const char *path, mode_t mode);      DESCRIPTION The function call:     creat(path, mode)   shall be equivalent to:     open(path, O_WRONLY|O_CREAT|O_TRUNC, mode)      RETURN VALUE Refer to open() .     ERRORS Refer to open() .   The following sections are informative.     EXAMPLES    Creating a File The following example creates the file /tmp/file with read and write permissions for the file owner and read permission for group and others. The resulting file descriptor is assigned to the fd variable.     #include <fcntl.h> ... int fd; mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; char *filename = "/tmp/file"; ... fd = creat(filename, mode); ...      APPLICATION USAGE None.     RATIONALE The creat() function is redundant. Its services are also provided by the open() function. It has been included primarily for historical purposes since many existing applications depend on it. It is best considered a part of the C binding rather than a function that should be provided in other languages.     FUTURE DIRECTIONS None.     SEE ALSO open() , the Base Definitions volume of IEEE Std 1003.1-2001, <fcntl.h>, <sys/stat.h>, <sys/types.h>     COPYRIGHT Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .  --------------------------------------------------------------------------------

user: user-2
content: 引用 6 楼 zw1103053925 的回复:[quote=引用 5 楼 user-2 的回复:] [quote=引用 4 楼 zw1103053925 的回复:] [quote=引用 3 楼 user-2 的回复:] [quote=引用 2 楼 zw1103053925 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] char oct[20]; int v=100; sprintf(oct,"0%o",v); printf("%s\n",oct);   请问赵四老师。我要用open函数或者creat，传入的第三个参数是mode_t类型的，和上面的char型数组应该怎么转换呢？？[/quote]  mode_t是用你需要的标志组合来的，不是用一个数转换成8进制  参看：http://www.xuebuyuan.com/2061960.html[/quote]  谢谢版主，我看到这个链接。argv里传来的是char类型的参数，现在要作为open里的mode参数。该如何转换才能成功呢？初学者，求版主给个解决办法，有点晕。谢谢版主[/quote]  字符串参数的应该是作为路径的参数吧，而不是标志参数[/quote]  是这样的，有一个main.c文件和一个creat.c文件。在main.c里通过get_opt函数获取到用户输入的选项后的值类似这样: demo -c filename mode  。两个值保存在argv[2],argv[3]里，get_opt函数种argv参数的类型是char型。然后通过creat(argv[2],argv[3])的方式使用creat.c里的creat函数，argv[2]中是filename，argv[3]中是mode（是用户输入用于创建文件的时候给予的文件属性）。 我有想到一个方式，在main.c拿到用户输入的mode的值转换为十进制，然后传入creat函数中，然后在creat中写三个switch嵌套。依次取三位数整型的第一位第二位第三位。依次掉入case中，定义一个mode_t类型的变量，最后赋值给这个变量。比较傻的方法。肯定有更好的办法。但是现在还没找到。= =太笨了自己[/quote]  那你只需要把字符串转成整数就可以了，不用管十进制还是八进制，因为他们在内存里都是一样的

user: user-0
content: 引用 5 楼 user-2 的回复:[quote=引用 4 楼 zw1103053925 的回复:] [quote=引用 3 楼 user-2 的回复:] [quote=引用 2 楼 zw1103053925 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] char oct[20]; int v=100; sprintf(oct,"0%o",v); printf("%s\n",oct);   请问赵四老师。我要用open函数或者creat，传入的第三个参数是mode_t类型的，和上面的char型数组应该怎么转换呢？？[/quote]  mode_t是用你需要的标志组合来的，不是用一个数转换成8进制  参看：http://www.xuebuyuan.com/2061960.html[/quote]  谢谢版主，我看到这个链接。argv里传来的是char类型的参数，现在要作为open里的mode参数。该如何转换才能成功呢？初学者，求版主给个解决办法，有点晕。谢谢版主[/quote]  字符串参数的应该是作为路径的参数吧，而不是标志参数[/quote]  是这样的，有一个main.c文件和一个creat.c文件。在main.c里通过get_opt函数获取到用户输入的选项后的值类似这样: demo -c filename mode  。两个值保存在argv[2],argv[3]里，get_opt函数种argv参数的类型是char型。然后通过creat(argv[2],argv[3])的方式使用creat.c里的creat函数，argv[2]中是filename，argv[3]中是mode（是用户输入用于创建文件的时候给予的文件属性）。 我有想到一个方式，在main.c拿到用户输入的mode的值转换为十进制，然后传入creat函数中，然后在creat中写三个switch嵌套。依次取三位数整型的第一位第二位第三位。依次掉入case中，定义一个mode_t类型的变量，最后赋值给这个变量。比较傻的方法。肯定有更好的办法。但是现在还没找到。= =太笨了自己

user: user-2
content: 引用 4 楼 zw1103053925 的回复:[quote=引用 3 楼 user-2 的回复:] [quote=引用 2 楼 zw1103053925 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] char oct[20]; int v=100; sprintf(oct,"0%o",v); printf("%s\n",oct);   请问赵四老师。我要用open函数或者creat，传入的第三个参数是mode_t类型的，和上面的char型数组应该怎么转换呢？？[/quote]  mode_t是用你需要的标志组合来的，不是用一个数转换成8进制  参看：http://www.xuebuyuan.com/2061960.html[/quote]  谢谢版主，我看到这个链接。argv里传来的是char类型的参数，现在要作为open里的mode参数。该如何转换才能成功呢？初学者，求版主给个解决办法，有点晕。谢谢版主[/quote]  字符串参数的应该是作为路径的参数吧，而不是标志参数

user: user-0
content: 引用 3 楼 user-2 的回复:[quote=引用 2 楼 zw1103053925 的回复:] [quote=引用 1 楼 zhao4zhong1 的回复:] char oct[20]; int v=100; sprintf(oct,"0%o",v); printf("%s\n",oct);   请问赵四老师。我要用open函数或者creat，传入的第三个参数是mode_t类型的，和上面的char型数组应该怎么转换呢？？[/quote]  mode_t是用你需要的标志组合来的，不是用一个数转换成8进制  参看：http://www.xuebuyuan.com/2061960.html[/quote]  谢谢版主，我看到这个链接。argv里传来的是char类型的参数，现在要作为open里的mode参数。该如何转换才能成功呢？初学者，求版主给个解决办法，有点晕。谢谢版主

user: user-2
content: 引用 2 楼 zw1103053925 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] char oct[20]; int v=100; sprintf(oct,"0%o",v); printf("%s\n",oct);   请问赵四老师。我要用open函数或者creat，传入的第三个参数是mode_t类型的，和上面的char型数组应该怎么转换呢？？[/quote]  mode_t是用你需要的标志组合来的，不是用一个数转换成8进制  参看：http://www.xuebuyuan.com/2061960.html

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:char oct[20]; int v=100; sprintf(oct,"0%o",v); printf("%s\n",oct);   请问赵四老师。我要用open函数或者creat，传入的第三个参数是mode_t类型的，和上面的char型数组应该怎么转换呢？？

user: user-1
content: char oct[20]; int v=100; sprintf(oct,"0%o",v); printf("%s\n",oct);