我有一个文件文本文件,例如“〜/ MA14.txt”,其值只有0或1。我需要使用“系统调用”打开打开文本文件,(最终将文件锁定,直到阅读为止)并检查如果值为0或1。我正在使用0的文件测试该功能。
问题是函数返回48(ascii值为零)而不是0。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <fcntl.h>
#include <string.h>
int get_permission(char *file_path_name);
int main() {
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) != NULL)
fprintf(stdout, "Current working dir: %s\n", cwd);
else
perror("getcwd() error");
char str[80];
strcpy(str, cwd);
strcat(str, "/");
strcat(str, "MA14");
strcat(str, ".txt");
printf("String obtained on concatenation: %s\n", str);
int permission = get_permission(str);
printf("permission is: %d\n", permission);
return 0;
}
int get_permission(char *file_path_name){
char c;
size_t nbytes;
nbytes = sizeof(c);
int fd = open(file_path_name, O_RDONLY | O_EXCL);
read(fd, &c, nbytes);
printf("c = % d\n", c);
close(fd);
return c;
}
Current working dir: ~/cmake-build-debug
String obtained on concatenation: ~cmake-build-debug/MA14.txt
c = 48
permission is: 48
Process finished with exit code 0
答案 0 :(得分:2)
您提供的代码有三个错误,因此您无法获得想要的结果。
第一个错误是在函数声明中,因为返回类型必须为char。
char get_permission(char *文件路径名);
第二个是在get_permission中打印c的值时,因为printf必须打印一个char [%c]而不是整数[%d]。
printf(“ c =%c \ n”,c);
第三个是主要功能,因为您必须了解我们上面所说的来调整类型。
int权限= get_permission(str);
printf(“权限为:%c \ n”,权限);
我重新发布了更正的代码。 我希望您觉得它有用。
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <fcntl.h>
#include <string.h>
char get_permission(char *file_path_name);
int main() {
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) != NULL)
fprintf(stdout, "Current working dir: %s\n", cwd);
else
perror("getcwd() error");
char str[80];
strcpy(str, cwd);
strcat(str, "/");
strcat(str, "MA14");
strcat(str, ".txt");
printf("String obtained on concatenation: %s\n", str);
int permission = get_permission(str);
printf("permission is: %c\n", permission);
return 0;
}
char get_permission(char *file_path_name){
char c;
size_t nbytes;
nbytes = sizeof(c);
int fd = open(file_path_name, O_RDONLY | O_EXCL);
read(fd, &c, nbytes);
printf("c = %c\n", c);
close(fd);
return c;
}
答案 1 :(得分:0)
您在评论中有2个选项,而我有第三个。选项是:
首先将值存储为二进制:
char c = 0; // Note this is the integer, not '0'
write(fd, &c, 1);
我不建议第三种选择。对于似乎是用例的情况,通常的做法是将文件保留为文本格式(ASCII),以便您可以在文本编辑器中读取文件以进行故障排除。因此,请使用前两个选项之一。