我使用myfile.c
编译器编译了一个名为gcc
的短文件,如:
$ gcc myfile.c -o myapp
一切正常,我按照以下方式运行:
$ ./myapp
我得到了什么:
No such file or directory.
当我ls
时,myapp仍在屏幕上,只是我无法运行它。但是我编译的其他一些文件仍能正常工作。我甚至删除了一些执行文件并再次编译它们并且工作顺利,所以我猜问题是在myfile.c中。
问题是:为什么文件在编译后存在,但内核无法通过警告“没有这样的文件或目录”实现它。
myfile.c我从beej.us复制以供学习:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
/* l_type l_whence l_start l_len l_pid */
struct flock fl = {F_WRLCK, SEEK_SET, 0, 0, 0 };
int fd;
fl.l_pid = getpid();
if (argc > 1)
fl.l_type = F_RDLCK;
if ((fd = open("lockdemo.c", O_RDWR)) == -1) {
perror("open");
exit(1);
}
printf("Press <RETURN> to try to get lock: ");
getchar();
printf("Trying to get lock...");
if (fcntl(fd, F_SETLKW, &fl) == -1) {
perror("fcntl");
exit(1);
}
printf("got lock\n");
printf("Press <RETURN> to release lock: ");
getchar();
fl.l_type = F_UNLCK; /* set to unlock same region */
if (fcntl(fd, F_SETLK, &fl) == -1) {
perror("fcntl");
exit(1);
}
printf("Unlocked.\n");
close(fd);
return 0;
}