我尝试使用systemcalls来创建新文件/覆盖现有文件,但由于某种原因,我有两个问题:
1
。当我第一次运行程序时,它以值0退出,所以它似乎成功创建了文件,但我在项目目录中看不到任何内容。
然后当我第二次运行程序时,文件被创建,但屏幕上会显示一条错误消息。
2.同样在程序第一次迭代之后,我无法在主函数的末尾看到prinf消息。
感谢您的帮助。
int readFileDesc = 0, writeFiledesc = 0;
int sourceFile = 1, destFile = 2, bufferSize = 3, isOverwrite;
if (argc != 4 && argc != 5) {
printf("Invalid number of arguments\n");
printf("Usage:\n");
printf(" ex1 [-f] SOURCE DEST BUFFER_SIZE");
exit(EXIT_FAILURE);
}
//Checking if -f [OP] is activated.
isOverwrite = (strcmp(argv[1], "-f") == 0);
if (isOverwrite) {
sourceFile++;
destFile++;
bufferSize++;
}
//Opening the source file
readFileDesc = open(argv[sourceFile], O_RDONLY);
if (readFileDesc < 0) {
perror("Unable to open source file for reading: ");
exit(EXIT_FAILURE);
}
//opening the destination file
if (!isOverwrite) {
//Case we dont have the -f [op] so we create the file.
writeFiledesc = open(argv[destFile],
O_CREAT | O_EXCL | O_WRONLY ,
S_IRUSR | S_IWUSR);
if (writeFiledesc < 0) {
perror("Unable to open destination file for reading: ");
exit(EXIT_FAILURE);
}
} else {
//Case we have the -f [op] so we override existing file.
writeFiledesc = open(argv[destFile], O_RDONLY | O_WRONLY | O_TRUNC);
if (writeFiledesc < 0) {
perror("Unable to open destination file for writing: ");
exit(EXIT_FAILURE);
}
}
//Assume the buffersize is legal.
bufferSize = atoi(argv[bufferSize]);
char data[bufferSize];
int nread, nwrite;
while ((nread = read(readFileDesc, data, bufferSize)) > 0) {
if ((nwrite = write(writeFiledesc, data, nread)) != nread) {
printf("write problem: ");
}
}
// cant see this!
printf("File %s was copied to %s" , argv[sourceFile] , argv[destFile]);
//handling errors
close(sourceFile);
close(destFile);
return EXIT_SUCCESS;
}
答案 0 :(得分:0)
这是错误的:
O_RDONLY
同时使用O_WRONLY
和O_RDWR
是错误的。您需要使用#include <sys/stat.h> #include <fcntl.h>
int open(const char *path, int oflag, ...);
。
每the POSIX standard for open()
:
<强>概要强>
oflag
...
oflag
的值由包含按位的OR标志构成 来自以下列表,定义于。 申请人应 准确指定前五个值之一(文件访问模式) 低于read()
的:了O_EXEC
仅供执行(非目录文件)。如果将此标志应用于目录,则结果未指定。
O_RDONLY
仅供阅读。
O_RDWR
开放阅读和写作。如果将此标志应用于FIFO,则结果未定义。
O_SEARCH
仅打开搜索目录。如果将此标志应用于非目录文件,则结果未指定。
O_WRONLY
仅供写作。
可以使用以下任意组合:
...
此外,write()
和ssize_t
返回int
,而不是$scope.$apply(function(){
$scope.isLoading = false;
});
。